python /多处理 : howto simplify "def" fields

标签 python multiprocessing function

下面的脚本使用多处理简单地从 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().nameworker 中访问自定义名称。

关于 python /多处理 : howto simplify "def" fields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624873/

相关文章:

python - 将用 Python 2 编写的代码转换为 Python 3

python - 安装 Python 3.6.5 但在 Docker 中获得 Python 3.6.6

python - 为什么 numpy 计算不受全局解释器锁的影响?

python - 将 Python 字典中的相同值替换为 None

python - 如何制作启动Python脚本的Linux后台进程(在C中)

python - Python 中的 Json 文件 - 输出摘要

python - 通过文件路径导入模块时使用 Python 多处理

python - 线程已完成的进程永远不会退出

Javascript函数不停止提交

c++ - c 函数原型(prototype)中预期为 ')'