我想用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
答案 0 :(得分:1)
默认情况下,多个进程不共享状态。
您正在从processListener
进程访问server.py
个实例。 processListener.py
进程有自己的processListener
实例(具有非None
数据属性)。
要进行演示,请将multiprocessing.Process
替换为threading.Thread
。默认情况下,多个线程共享对象,您应该看到非None
数据。