0

Python でマルチプロセス UDP サーバーを作成し、クラスのプロセスごとに 1 つのポートをリッスンしたい:

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.pyます。processListener.pyプロセスには独自のprocessListenerインスタンス (非Noneデータ属性を持つ) があります。

それを実証するには、 に置き換えmultiprocessing.Processますthreading.Thread。複数のスレッドがデフォルトでオブジェクトを共有し、非Noneデータが表示されるはずです。

于 2013-05-11T21:01:15.450 に答える