多个流程可以访问好的管道?

问题描述 投票:0回答:1

我有几个脚本从多个网站抓取数据。下一步是处理数据。我想设置一个接收数据并处理数据的worker。让一个工作程序始终运行并等待scraper将数据提供给进程的良好管道/工作流方法是什么?

我认为像处理请求的API服务器,但有更好的解决方案吗?

python parallel-processing
1个回答
1
投票

没有更多细节,我只能提供一般性建议:

如果它们都在同一台机器上运行,并且通过相同的过程启动了scraper和worker,则可以在标准库中使用multiprocessing.Queue。它应该适用于非常简单的工作流程。

为了获得更大的灵活性,我将使用消息传递库在进程之间进行通信。我喜欢ZeroMQ,但还有其他人。

ZeroMQ支持本地进程间传输和网络传输,您可以在几乎没有代码更改的情况下在传输类型之间进行更改。如果你从multiprocessing.Queue开始,但事实证明你想在另一台机器上运行worker,你将不得不重写很多代码。

刮刀和工人可以直接相互通信(PUSH / PULL模式),也可以在它们之间有一个代理/队列。

如果你总是只有一个工人PUSH-PULL就足够了,如果你有更多,你会想要一个队列。

PUSH / PULL:每个刮刀与工人交谈并发送工作。刮刀必须轮询每个刮刀进行工作。

队列:刮刀将任务发送到队列。工作人员查询队列的工作。

PUSH / PULL稍微简单一点,但这意味着工人必须了解并连接每个刮刀。如果您的工作流程很复杂,它可能会变得混乱。

对于队列,scraper和worker只需知道队列,它就是中央代理。

http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/patterns/pushpull.html

http://learning-0mq-with-pyzmq.readthedocs.io/en/latest/pyzmq/devices/queue.html

© www.soinside.com 2019 - 2024. All rights reserved.