[英]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.futures
与ProcessPoolExecutor
一起使用,则默认的工作人员数量将是“机器上的处理器数量”。
如果您只是创建Process
对象并自己启动它们,则没有这样的默认限制。
有关“您的进程可以运行的内核数量”何时不同于“机器上的处理器数量”的讨论,请参阅此答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.