繁体   English   中英

multiprocessing 一次运行多少个进程?

[英]multiprocessing how many processes run at one time?

我运行了我的第一个多处理代码。 测试代码如下所示。 在我的测试中,我只运行了两个进程来查看它是否产生了预期的结果,它确实做到了。

我现在想“真正地”运行它。 我的电脑有 8 个内核,我想运行大约 8 个内核。 100 个进程。 我的问题是,如果我运行下面的代码并创建 100 个进程,我是否需要指定一次运行的最大进程数,或者后台的代码是否做了一些聪明的事情并意识到只有 8 个内核和相应地优化?

 if __name__ == '__main__':

    # set up the data
    df_data = Somefunc()   
    pickled_df = pickle.dumps(df_data)
    size = len(pickled_df)

    # create a shared memory
    shm = shared_memory.SharedMemory(create=True, size=size)
    shm.buf[:size] = pickled_df

    # Notice that we only pass the name of the block, not the block itself
    processes = [Process(target=run_func, args=(shm.name, x)) for x in range(1, 3)]
    [p.start() for p in processes]
    [p.join() for p in processes]

    shm.close()

    # Unlink should only be called once on a memory block
    shm.unlink()

如果您使用multiprocessing.Pool来管理进程,它会将工作进程的数量默认为os.cpu_count()的值,这在大多数情况下会为您提供适当的值。

同样,如果您将concurrent.futuresProcessPoolExecutor一起使用,则默认的工作人员数量将是“机器上的处理器数量”。

如果您只是创建Process对象并自己启动它们,则没有这样的默认限制。


有关“您的进程可以运行的内核数量”何时不同于“机器上的处理器数量”的讨论,请参阅此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM