将 Python 进程 A(生成文档)的输出管道传输到其他 Python 进程 B(将文档插入数据库,如 Mongo)



这可能是一个愚蠢的问题。但是,我正在寻找一种有效的 Python 方法来跟踪问题。

我有一个process A,它不断生成一些文档(一个计算繁重的过程(。

我必须运行process B使用来自 A 的输出(作为单个文档或一批文档(并将其插入 MongoDB。(batch is preferable(。

从 A 到 B 的管道最有效方法是什么?管道是这里最好的方法吗?

我可以等待 A 完成,然后等待 B 开始。但我觉得它没有效率。

tl;DR:使用多处理

听起来 A 可能需要> B 花费 10 倍的时间。 如果是这样,那么只需使用check_output。 让 B 耐心等待 A 孩子将文档发送到标准输出, 然后将文档插入数据库。

或者,也许A和B需要相当的时间, 并且批处理是可取的。 有一堆A作业写信给/tmp/temp.${PID}, 然后mv(os.rename()(完成的文件 到/tmp/out/目录中。 让 B 定期将此类文件铲入数据库, 随时取消链接。

无论哪种方式,您都将咀嚼大量的CPU周期 当您的for循环访问许多输入时, 并且您希望保持多个核心忙碌。 输入多处理。

将您的for循环转换为map调用, 例如:list(map(str, range(3)))将把[0, 1, 2]变成['0', '1', '2']. 当然,你的功能会更多 计算密集度比str.

有了这个,你处于一个很好的位置 掏出一堆孩子,他们都会 运行相同的函数:

with multiprocessing.Pool() as p:
p.map(my_func, bunch_of_inputs)

最新更新