多重处理是适合我的工具吗?

2024-04-25 15:04:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要编写一个非常具体的数据处理守护程序。你知道吗

以下是我认为它可以与多处理一起工作的方式:

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

  • 进程#2:两个进程,根据进程#1中接收到的数据获取实际数据。提取的数据将存储到一个(大)队列中,以便“稍后”处理。

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

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

所有这些不同过程背后的理念是尽可能地使它们专业化,并使它们尽可能独立。你知道吗

所有这些进程都将打包到一个主守护进程中,该守护进程在此处实现:

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

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

注意事项:

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

提前感谢您的反馈。你知道吗


Tags: 数据程序http队列进程过程www方式
1条回答
网友
1楼 · 发布于 2024-04-25 15:04:13

一般来说,你在不同工作岗位上的分工以及让他们沟通的计划已经很好了。但是,您应该注意的一点是,每当处理步骤受到I/O或CPU限制时。如果您是I/O绑定的,我会尽可能使用线程模块:应用程序的内存占用会更小,线程之间的通信也会更高效,因为共享内存是允许的。只有当您需要额外的CPU电源时,才可以进行多处理。在您的系统中,您可以同时使用这两种方法(看起来进程3(或更多)将执行一些繁重的计算,而其他工作人员将主要受I/O限制)。你知道吗

相关问题 更多 >

    热门问题