2013-08-01 46 views
1

我对Python多处理模块相当熟悉,但我不确定如何实现这个设置。我的项目有这个基本流程:Python多处理管理

要求串行设备 - >收集回应 - >解析响应 - >断言响应 - >重复

它是正确的,现在遍历,直到顺序操作已收集所需宣称的答复的数量。我希望通过让'主进程'执行前两个操作,然后将解析和断言任务传递给工作进程队列,从而加速完成此任务。但是,这只有在主进程始终运行时才有用。我保证要在多核机器上工作。

有什么办法让多处理模块中的进程总是有焦点/使运行,所以我可以做到这一点?

+0

我不知道你在问什么。你可以开始永久运行并相互通信的进程。你能解释这个问题在哪里吗? – freakish

+0

如果我知道如何处理正常工作,当您创建多个进程的焦点(从处理器perspectice)是任意的。 IE浏览器如果我收到4个响应并将解析传递给工作人员,则可能有一段时间,我的4内核处理器只处理解析作业,而不是串行通信过程。我希望有一种方法可以确保串行通信过程始终处于处理器焦点之内。 –

+1

您不能强制处理器专注于给定的进程(至少不在合理的操作系统下)。但是你误解了一些事情:并不是说处理器将重点放在这4个过程上,直到他们完成工作。上下文切换发生在工作中间(这就是为什么你可以打开例如10个电影播放器​​,并且它们全部同时工作)。所以你不应该担心,你的服务器不会被阻塞。 – freakish

回答

1

从我能收集到的信息(假设您没有严格要求主人是总是记录来自串行设备的数据),您只需让主人准备好给任何员工一大块数据并准备好在工作准备就绪后立即从任何工作人员接收数据。

以达致这使用两种queus和多

Multiprocessing Queue in Python

How to use multiprocessing queue in Python?

这应该是足够来回您的需求,如果时间(分析数据)>>收集数据

1

这里有一种方法实施您的工作流程:

  1. 有两个multiprocessing.Queue对象:tasks_queueresults_queuetasks_queue将保存设备输出,并且results_queue将保存断言的结果。

  2. 有工人池,每一个劳动者,是直接从 tasks_queue设备输出,分析它,断言,并在results_queue提出主张的结果。

  3. 有另一个过程连续轮询设备并把设备 输出在tasks_queue

  4. 还有最后一个过程中不断轮询results_queue,并 结束达到resuts所需数量的(成功 断言),当总体方案。

的过程(multiprocessing.Process对象)总数为2 + ķ,其中ķ是工人在池的数量。