0

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

1 回答 1

1

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

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

为了演示它,替换multiprocessing.Processthreading.Thread. 默认情况下,多个线程共享对象,您应该会看到非None数据。

于 2013-05-11T21:01:15.450 回答