2

我需要编写一个非常具体的数据处理守护进程。

这是我认为它可以与多处理一起使用的方式:

  • 进程#1:一个进程来获取一些重要的元数据,它们可以每秒获取一次,但这些数据必须在进程#2中可用。进程#1 写入数据,进程#2 读取它们。

  • 进程#2:两个进程将根据进程#1 中收到的内容获取真实数据。获取的数据将存储到(大)队列中以“稍后”处理

  • 进程#3:两个(或更多)进程轮询在进程#2 中创建的队列并处理这些数据。完成后,将填充一个新队列以在流程 #4 中使用

  • 进程#4:两个进程将读取由进程#3 填充的队列并通过HTTP 发送回结果。

所有这些不同过程背后的想法是尽可能地将它们专门化,并使它们尽可能独立。

所有这些进程将被包装到一个在这里实现的主守护进程中:

我想知道我所想象的是否相关/愚蠢/过度杀伤/等等,特别是如果我在将守护进程multiprocessing.Process的主父进程中运行守护进程(es)。此外,我有点担心潜在的锁定问题。理论上,读写数据的过程使用不同的变量/结构,因此应该避免一些问题,但我仍然担心。

也许对我的上下文使用多处理不是正确的做法。我很想得到您对此的反馈。

备注:

  • 我不能使用 Redis 作为数据结构服务器
  • 我考虑过将 ZeroMQ 用于 IPC,但如果多处理也可以完成这项工作,我会避免使用另一个额外的库。

提前感谢您的反馈。

4

1 回答 1

0

一般来说,你在不同工作人员中的不同任务以及你让他们沟通的计划看起来已经很好了。但是,您应该注意的一件事是,每当处理步骤受 I/O 或 CPU 限制时。如果您受 I/O 限制,我会尽可能使用线程模块:您的应用程序的内存占用会更小,并且线程之间的通信可以更有效,因为允许共享内存。仅当您需要额外的 CPU 能力时,才使用多处理。在您的系统中,您可以同时使用两者(看起来进程 3(或更多)将执行一些繁重的计算,而其他工作人员将主要受 I/O 限制)。

于 2012-09-11T11:30:18.697 回答