【发布时间】:2015-08-22 09:03:01
【问题描述】:
我遇到了以下问题:
我有两个不同的课程;我们称它们为interface 和worker。该接口应该接受来自外部的请求,并将它们多路复用到多个工作人员。
与我发现的几乎所有示例相反,我有几个特点:
- 不应为每个请求重新创建工作器。
- 工人不同;
workers[0]的请求无法由workers[1]回答。这种复用是在interface中完成的。 - 我有许多难以通过事件或简单队列建模的函数式调用。
- 有几个不同的请求,这会使每个请求一个队列变得困难。
例如,假设每个工作人员都存储一个整数(假设该工作人员收到的呼叫数)。在非并行处理中,我会使用这样的东西:
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
这显然行不通。有什么作用?
或者,也许更相关的是,我没有多处理方面的经验。是否有我遗漏的设计范式可以轻松解决上述问题?
谢谢!
作为参考,我考虑了几种方法,但找不到好的方法:
- 使用一个请求和应答队列。我已经放弃了这个想法,因为这要么阻止
interface'获取当前工作人员的回答时间(使其难以扩展),要么需要我发送额外的信息。 - 使用一个请求队列。每条消息都包含一个管道,用于返回对该请求的答案。修复issue with being unable to send pipes via pipes 后,我遇到了管道关闭问题,除非通过连接发送两端。
- 使用一个请求队列。每条消息都包含一个队列,用于返回对该请求的答案。失败,因为我无法通过队列发送队列,但减少技巧不起作用。
- 上述内容也适用于各个 Manager 生成的对象。
【问题讨论】: