我想用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
数据。