gpt4 book ai didi

python : multiprocessing managament

转载 作者:行者123 更新时间:2023-12-01 05:52:21 24 4
gpt4 key购买 nike

使用多处理Python库,我可以启动多进程,例如

import multiprocessing as mu

def worker(n)
print "worker:", n
n = int(1e4)
for i in range(n):
for j in range(n):
i*j
return

if __name__ == '__main__':
jobs = []
for i in range(5):
p = mu.Process(target=worker, args=(i,))
jobs.append(p)
p.start()

我可以通过以下方式获取处理器(CPU 核心)的数量

np = mu.cpu_count()

但是如果我有一个进程列表,我如何才能在不过度充电的情况下启动处理器?
如果我有四核,我如何启动前 4 个进程?当完成一个进程时启动其他进程。

引用文献

最佳答案

我建议回避问题并使用multiprocessing.Pool( exampleapi )。

(根据文档中的示例修改)

from multiprocessing import Pool

def f(x):
return x*x

if __name__ == '__main__':
num_proc = multiprocessing.cpu_count()
pool = Pool(processes=num_proc)
res = pool.map(f, range(10))

或者,您可以设置生产者/消费者方案并拥有固定数量的长时间运行的子流程。

第三种非常快速但肮脏的方法是使用一个mu.Queue。请注意,get 会阻塞,直到返回结果为止。

import multiprocessing as mu
import time
res = mu.Queue()

def worker(n):
print "worker:", n
time.sleep(1)
res.put(n)
return

if __name__ == '__main__':
jobs = []
np = mu.cpu_count()
print np
# start first round
for j in range(np):
p = mu.Process(target=worker, args=(j,))
jobs.append(p)
p.start()
# every time one finishes, start the next one
for i in range(np,15):
r = res.get()
print 'res', r
p = mu.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
# get the remaining processes
for j in range(np):
r = res.get()
print 'res', r

关于 python : multiprocessing managament,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com