下面的脚本使用多处理简单地从 0-9 计数,其中 Thread-1 计算偶数,Thread-2 计算偶数。请注意,worker 本身的唯一区别是初始 x 值为 0 和 1。有没有办法简化这个而不是一遍又一遍地键入相同的代码?对于 2 线程来说没什么大不了的,但是让 16 个进程(0-16)用于每个不同的起始值,这变得非常多余。
#!/usr/bin/python
from multiprocessing import Process
def worker1(name):
x = 0
print name, 'starting...'
while x < 10:
print x
x+=2
print name, 'complete!'
def worker2(name):
x = 1
print name, 'starting...'
while x < 10:
print x
x+=2
print name, 'complete!'
if __name__ == '__main__':
wa = Process(target=worker1, args=('Thread-1',))
wb = Process(target=worker2, args=('Thread-2',))
wa.start()
wb.start()
最佳答案
将 x
作为参数传递给 worker
:
import multiprocessing as mp
def worker(x):
name = mp.current_process().name
print name, 'starting...'
while x < 10:
print x
x+=2
print name, 'complete!'
if __name__ == '__main__':
num_procs = 2
procs = [mp.Process(target=worker, args=(x,)) for x in range(num_procs)]
for proc in procs:
proc.start()
for proc in procs:
proc.join()
您不必将name
作为参数传递; multiprocessing
为每个进程提供一个可通过 mp.current_process().name
访问的名称。如果您真的想要自定义名称,请使用 mp.Process(target=worker, name='custom name', ...)
设置名称。然后可以使用 `mp.current_process().name
在 worker
中访问自定义名称。
关于 python /多处理 : howto simplify "def" fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624873/