用Python创建一个多进程UDP服务器,一个进程监听一个端口



我想用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

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

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

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

最新更新