Python多处理—两个进程之间类似函数的通信
我有以下问题: 我有两个不同的班级;让我们把它们称为Python多处理—两个进程之间类似函数的通信,python,multiprocessing,Python,Multiprocessing,我有以下问题: 我有两个不同的班级;让我们把它们称为接口和工作者。接口应该接受来自外部的请求,并将它们多路传输给多个工作者 与我发现的几乎每一个例子相反,我有几个特点: 不应为每个请求重新创建工人 工人是不同的;工作人员[1]无法答复对工作人员[0]的请求。此多路复用在接口中完成 我有许多类似函数的调用,很难通过事件或简单队列进行建模 有几个不同的请求,这使得每个请求都有一个队列很困难 例如,假设每个worker都存储一个整数(假设该worker接收到的呼叫数)。在非并行处理中,我会使用如下
接口
和工作者
。接口应该接受来自外部的请求,并将它们多路传输给多个工作者
与我发现的几乎每一个例子相反,我有几个特点:
- 不应为每个请求重新创建工人
- 工人是不同的;
无法答复对工作人员[1]
的请求。此多路复用在工作人员[0]
接口中完成
- 我有许多类似函数的调用,很难通过事件或简单队列进行建模
- 有几个不同的请求,这使得每个请求都有一个队列很困难
class interface(object):
workers = None #set somewhere else.
def get_worker_calls(self, worker_id):
return self.workers[worker_id].get_calls()
class worker(object)
calls = 0
def get_calls(self):
self.calls += 1
return self.calls
这显然是行不通的。这是什么意思
或者,更相关的是,我没有多处理的经验。有没有一个我遗漏的设计范例可以轻松解决上述问题
谢谢
作为参考,我考虑了几种方法,但没有找到一种好的方法:
- 使用一个请求和应答队列。我放弃了这个想法,因为这要么会阻塞当前工作人员的回答时间(使其可伸缩性差),要么会要求我发送额外的信息
- 使用一个请求队列。每条消息都包含一个管道,用于返回该请求的答案。修复后,我遇到了管道关闭的问题,除非通过连接发送两端李>
- 使用一个请求队列。每条消息都包含一个队列,用于返回该请求的答案。失败,因为我无法通过队列发送队列,但缩减技巧不起作用
- 上述内容也适用于各个管理器生成的对象
是如何使用ZeroMQ队列在python中处理多处理的一个很好的示例。多处理意味着有2个以上的独立进程在运行。无法从一个进程直接访问另一个进程的内存(与多线程一样) 您最好使用某种外部队列机制,您可以从或开始。RQ比较简单,但芹菜有内置的监控功能 但您必须知道,只有当芹菜/RQ能够“打包”所需的函数/类并将它们发送到其他进程时,多处理才会起作用。因此,您必须使用_主_级函数(位于文件顶部,不属于任何类) 您可以自己实现它,Redis非常简单,ZeroMQ和RabbitMQ也很好 这是如何使用ZeroMQ队列在python中处理多处理的一个很好的示例