Python多处理模块不调用函数

时间:2018-01-13 15:59:19

标签: python python-3.6 python-multiprocessing

我有一个程序需要创建几个图表,每个图表通常需要几个小时。因此,我想在不同的内核上同时运行这些内容,但似乎无法使用// @flow type Foo = {| foo: string |} function test(foo: Foo) { if (foo.bar) { console.log("WTF?") } } 模块运行这些进程。这是我的代码:

multiprocessing

if __name__ == '__main__': jobs = [] for i in range(5): p = multiprocessing.Process(target=full_graph) jobs.append(p) p.start() p.join() 已经在程序的早期定义,并且只是一个运行其他函数集合的函数)

该功能通常会输出一些图形,并将数据保存到.txt文件中。所有数据都保存到相同的2个文本文件中。但是,使用上面的代码调用函数不会给出控制台输出,也不会给文本文件输出任何内容。所有这一切都是几秒钟的暂停,然后程序退出。

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

1 个答案:

答案 0 :(得分:1)

如果没有简单的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.joinhttps://docs.python.org/3/library/multiprocessing.html#multiprocessing.Process.join

  

如果可选参数timeout为None(缺省值),则该方法将阻塞,直到调用其join()方法的进程终止。如果timeout是一个正数,它最多会阻塞超时秒。请注意,如果方法的进程终止或方法超时,则该方法返回None。检查进程的exitcode以确定它是否终止。

如果每个流程都有不同之处,那么您应该为args提供一些full_graph提示:这可能是缺失的因素吗?)

您可能希望使用map

中的Pool这样的界面

并且(再次从文档中)

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]))
相关问题