【问题标题】:Multiprocessing, how to run processes in parallel without creating zombies?多处理,如何在不创建僵尸的情况下并行运行进程?
【发布时间】:2013-08-09 04:09:10
【问题描述】:

我想并行运行这些进程,所以我从__main__ 部分注释掉了p.join。 没有.join 的后果是什么,或者更好的是,我应该使用不同的方法进行并行多处理吗?

import multiprocessing

def worker(num):
    x = 0
    for i in range(10000):
        x+=1
    print x, num

if __name__ == '__main__':

    for i in range(4):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
        # p.join()

【问题讨论】:

    标签: python-2.7 multiprocessing


    【解决方案1】:

    启动后加入进程。

    if __name__ == '__main__':
        procs = []
        for i in range(4):
            p = multiprocessing.Process(target=worker, args=(i,))
            p.start()
            procs.append(p)
        for p in procs:
            p.join()
    

    如果你运行多个类似的任务,你可以使用multiprocessing.Pool

    if __name__ == '__main__':
        pool = multiprocessing.Pool()
        pool.map(worker, range(4))
        pool.close()
        pool.join()
    

    【讨论】:

    • Pool 似乎正确地拆分了实际工作,而不是在每个进程中独立运行任务?
    • @kylex, pool.map(worker, range(4)) 就像调用 worker(0), worker(1), worker(2), worker(3) 并行。但仅在指定的进程计数内运行(默认:cpu 计数)。
    猜你喜欢
    • 1970-01-01
    • 2014-09-30
    • 2021-02-20
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2015-01-15
    • 2014-10-12
    相关资源
    最近更新 更多