使用Python创建一个多进程UDP服务器,一个用于侦听一个端口的进程

时间:2013-05-11 19:53:21

标签: python udp multiprocessing

我想用Python创建一个多进程UDP服务器,从类中为每个进程监听一个端口:

processListener.py

import multiprocessing
import socket

class processListener(multiprocessing.Process):
def __init__(self):
    multiprocessing.Process.__init__(self)
    self.data = None

def run(self):
    self.startServer()
    return

def startServer(self):
    udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    address = ('', self.port)
    udpSocket.bind(address)
    while 1:
        data, client = udpSocket.recvfrom(1024)
        print self.data, '>>>', data.strip()
        self.data = data.strip()
        udpSocket.sendto('ACK', client)
    return

我的主文件是server.py

from processListener import *

# Variable Definition
port = 4000

# Sever Initialization
if __name__ == '__main__':

process = processListener()
process.port = port
process.start()

while True:
    command = raw_input()
    if command == 'showdata':
            print 'Last Data is:', process.data

服务器运行时,我从UDP发送数据到localhost:4000

shell$ 
None >>> Test Data

但是当我使用命令showdata

时问题就出现了
shell$
None >>> Test Data
showdata
Last Data is: None

1 个答案:

答案 0 :(得分:1)

默认情况下,多个进程不共享状态。

您正在从processListener进程访问server.py个实例。 processListener.py进程有自己的processListener实例(具有非None数据属性)。

要进行演示,请将multiprocessing.Process替换为threading.Thread。默认情况下,多个线程共享对象,您应该看到非None数据。