作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用多处理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
( example , api )。
(根据文档中的示例修改)
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/
使用多处理Python库,我可以启动多进程,例如 import multiprocessing as mu def worker(n) print "worker:", n
我是一名优秀的程序员,十分优秀!