【问题标题】:Multiprocessing with worker.run() does work in serie instead of parallel?使用 worker.run() 进行多处理是否可以串行而不是并行工作?
【发布时间】:2016-12-12 09:06:06
【问题描述】:

我正在尝试创建一个本质上是这样工作的程序:

import multiprocessing
import time

def worker(numbers):
    print(numbers)
    time.sleep(2)
    return

if __name__ =='__main__':
    multiprocessing.set_start_method("spawn")
    p1 = multiprocessing.Process(target=worker, args=([0,1,2,3,4],))
    p2 = multiprocessing.Process(target=worker, args=([5,6,7,8],))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

    while(1):
        p1.run()
        p2.run()
        p1.join()
        p2.join()
        print('Done!')

第一次通过p#.start() 调用进程时,它们是并行执行的。第二次通过p#.run()方法调用它们时,它们是串行执行的。

如何确保后续的方法调用也并行执行?

编辑:流程一起开始很重要。进程 1 执行两次而进程 2 只执行一次是不可能的。

编辑:我还应该注意,此代码在树莓派 v3 模型 B 上运行。

【问题讨论】:

    标签: python-3.4 python-multiprocessing raspberry-pi3


    【解决方案1】:

    据我所知,一个线程只能启动一次。之后当你调用 run 方法时,它只是一个简单的函数。这就是它不并行运行的原因。

    【讨论】:

    • 所以你的意思是你可以启动一次进程,它会并行运行。如果您想再次并行执行,您要么需要终止并创建一个新进程,要么将进程置于等待新输入的循环中?
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多