Python进程间与空闲进程的通信

Python进程间与空闲进程的通信,python,queue,multiprocessing,pipe,interprocess,Python,Queue,Multiprocessing,Pipe,Interprocess,我有一个空闲的后台进程来处理队列中的数据,我用以下方式实现了它。本例中传递的数据只是一个整数,但我将传递多达1000个整数的列表,并每秒在队列上放置多达100个列表。这是正确的方法,还是我应该研究更详细的RPC和服务器方法 import multiprocessing import Queue import time class MyProcess(multiprocessing.Process): def __init__(self, queue, cmds): m

我有一个空闲的后台进程来处理队列中的数据,我用以下方式实现了它。本例中传递的数据只是一个整数,但我将传递多达1000个整数的列表,并每秒在队列上放置多达100个列表。这是正确的方法,还是我应该研究更详细的RPC和服务器方法

import multiprocessing
import Queue
import time

class MyProcess(multiprocessing.Process):

    def __init__(self, queue, cmds):
        multiprocessing.Process.__init__(self)  
        self.q = queue
        self.cmds = cmds

    def run(self):
        exit_flag = False
        while True:
            try:
                obj = self.q.get(False)
                print obj
            except Queue.Empty:
                if exit_flag:
                    break
                else:
                    pass
            if not exit_flag and self.cmds.poll():
                cmd = self.cmds.recv()
                if cmd == -1:
                    exit_flag = True
            time.sleep(.01)

if __name__ == '__main__':
    queue = multiprocessing.Queue()
    proc2main, main2proc = multiprocessing.Pipe(duplex=False)
    p = MyProcess(queue, proc2main)
    p.start()
    for i in range(5):
        queue.put(i)    
    main2proc.send(-1)
    proc2main.close()
    main2proc.close()
    # Wait for the worker to finish
    queue.close()
    queue.join_thread()
    p.join()

这取决于处理数据需要多长时间。我说不出来,因为我并没有数据样本,但一般来说,当您需要负载平衡、有保证的正常运行时间或可伸缩性时,最好转向更复杂的RPC和服务器方法。请记住,这些东西会增加复杂性,这可能会使您的应用程序更难部署、调试和维护。它还将增加处理任务所需的延迟(这可能是您关心的问题,也可能不是)


我将使用一些示例数据对其进行测试,并确定您是否需要多个服务器提供的可伸缩性

这取决于处理数据需要多长时间。我说不出来,因为我并没有数据样本,但一般来说,当您需要负载平衡、有保证的正常运行时间或可伸缩性时,最好转向更复杂的RPC和服务器方法。请记住,这些东西会增加复杂性,这可能会使您的应用程序更难部署、调试和维护。它还将增加处理任务所需的延迟(这可能是您关心的问题,也可能不是)

我将使用一些示例数据对其进行测试,并确定您是否需要多个服务器提供的可伸缩性