1

下面的脚本使用多处理从 0-9 简单地计数,其中 Thread-1 计数偶数,Thread-2 计数偶数。请注意,工人本身的唯一区别是初始 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()
4

2 回答 2

2

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', ...). 然后可以从workerwith中访问自定义名称`mp.current_process().name

于 2013-07-12T22:22:31.817 回答
2

您可以将初始值以及步骤和其他变量传递给工作人员:

#!/usr/bin/python
from multiprocessing import Process

def worker(name, initial, step=2):
    x = initial
    print name, 'starting...'
    while x < 10:
            print x
            x += step
    print name, 'complete!'

if __name__ == '__main__':
    wa = Process(target=worker1, args=('Thread-1', 0))
    wb = Process(target=worker2, args=('Thread-2', 1))

    wa.start()
    wb.start()
于 2013-07-12T22:25:01.933 回答