gpt4 book ai didi

Python多处理模块不调用函数

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

我有一个程序需要创建多个图表,每个图表通常需要几个小时。因此,我想在不同的内核上同时运行这些进程,但似乎无法让这些进程与 multiprocessing 模块一起运行。这是我的代码:

if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=full_graph)
jobs.append(p)
p.start()
p.join()

(full_graph() 已在程序的前面定义,它只是一个运行其他函数集合的函数)

该函数通常会输出一些图表,并将数据保存到.txt 文件中。所有数据都保存到相同的 2 个文本文件中。但是,使用上述代码调用函数不会给出控制台输出,也不会向文本文件提供任何输出。所发生的只是几秒钟的长时间暂停,然后程序退出。

我正在使用带有 WinPython 3.6.3 的 Spyder IDE

最佳答案

如果没有简单的 full_graph 示例,没有人可以告诉您发生了什么。但你的代码本质上是错误的。

if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=full_graph)
jobs.append(p)
p.start()
p.join() # <- This would block until p is done

请参阅p.join()之后的注释。如果您的流程确实需要几个小时才能完成,您将运行一个流程几个小时,然后运行第二个、第三个流程。串行并使用单核。

来自文档:https://docs.python.org/3/library/multiprocessing.html

Process.join:https://docs.python.org/3/library/multiprocessing.html#multiprocessing.Process.join

If the optional argument timeout is None (the default), the method blocks until the process whose join() method is called terminates. If timeout is a positive number, it blocks at most timeout seconds. Note that the method returns None if its process terminates or if the method times out. Check the process’s exitcode to determine if it terminated.

如果每个进程执行不同的操作,那么您还应该为 full_graph 设置一些 args(提示:这可能是缺少的因素吗? )

您可能想使用 Pool 中的 map 等接口(interface)

并执行(再次从文档中)

from multiprocessing import Pool

def f(x):
return x*x

if __name__ == '__main__':
with Pool(5) as p:
print(p.map(f, [1, 2, 3]))

关于Python多处理模块不调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48241555/

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