gpt4 book ai didi

python - 如何在新 shell 中启动 multiprocessing.Pool 中的每个工作进程?

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:55 34 4
gpt4 key购买 nike

我正在尝试将工作池中生成的进程的执行耦合到新的系统终端。在下面的示例中(改编自 @sylvain-leroux 对 this 问题的回答),构建了一个工作池来对排队对象执行一些工作。

import os
import time
import multiprocessing

# A main function, to be run by our workers.
def worker_main(queue):
print('The worker at', os.getpid(), 'is initialized.')
while True:

# Block until something is in the queue.
item = queue.get(True)
print(item)
time.sleep(0.5)

if __name__ == '__main__':

# Instantiate a Queue for communication.
the_queue = multiprocessing.Queue()

# Build a Pool of workers, each running worker_main.
the_pool = multiprocessing.Pool(3, worker_main, (the_queue,))

# Iterate, sending data via the Queue.
for i in range(5):
the_queue.put("That's a nice string you got there.")
the_queue.put("It'd be a shame if something were to... garble it.")

worker_pool.close()
worker_pool.join()
time.sleep(10)

如果您从系统终端运行此命令,您将看到一堆乱码文本,因为每个工作人员都在同一个控制台中写入并执行。对于我正在处理的项目,生成一个新的 shell/控制台来托管每个工作进程会很有帮助,这样所有打印输出都显示在该 shell 中,并且工作进程的执行托管在该 shell 中。我见过几个使用 shell 关键字通过 Popen 执行此操作的示例,但由于兼容性限制,我需要坚持基于池的实现。有人这样做过吗?感谢指导。

最佳答案

尝试以相反的方式使用队列

让工作人员将消息放入队列中,并在父进程中从队列中获取消息并打印它们。这应该消除混合输出。

如果您想在父进程和工作进程之间传递消息,请使用两个队列。一种用于将消息传递给工作人员,另一种用于将消息传递回父级。

关于python - 如何在新 shell 中启动 multiprocessing.Pool 中的每个工作进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413055/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com