Python,多处理库问题

Python, issue with multiprocessing library

我有一个程序,我想在其中 运行 一个函数并行处理多个参数。

节目格式如下:

import statements 

def function1():
     do something

def function2()
     do something

def main():

     function1()

我在网上找到了几个如何使用 multiprocessing 库的示例,例如下面的通用模板

import multiprocessing

def worker(num):
    print 'Worker:', num
    return

if __name__ == '__main__':
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()

据我了解,worker() 是要并行执行的功能。但我不确定在哪里或如何使用 (if __name__ == '__main__':) 屏蔽代码。

截至目前,该块在我的 main() 中,当我 运行 程序时,我没有让 worker 函数执行多次,而是我的 main 被执行了多次?

那么放置 (if __name__ == '__main__':) 方块的正确位置在哪里

将您提供的两个示例混合在一起,看起来像这样:

import multiprocessing

def worker(num):
    print 'Worker:', num
    return

def main():

    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        p.start()
        p.join()

if __name__ == '__main__':
     main()

worker 替换为 function1,即您想要并行化的任何一个。

关键部分是在 if __name__ == '__main__': 块中调用 main 函数,但是在这个简单的示例中,您可以轻松地将代码放在 def main(): 下的 if __name__ == '__main__': 下直接。

如果你永远不会从这个文件中导入任何东西,你甚至不需要 if __name__ == '__main__': 部分;仅当您希望能够将函数从此脚本导入到其他 scripts/an 交互式会话而无需 运行 main() 中的代码时,才需要这样做。参见 What does if __name__ == "__main__": do?

所以最简单的用法是:

import multiprocessing

def worker(num):
    print 'Worker:', num
    return

for i in range(5):
    p = multiprocessing.Process(target=worker, args=(i,))
    p.start()
    p.join()

编辑:多处理池示例

import multiprocessing

def worker(num):
    #print 'Worker:', num
    return num

pool = multiprocessing.Pool(multiprocessing.cpu_count())

result = pool.imap(worker, range(5))

print list(result)

打印:

[0, 1, 2, 3, 4]

另请参阅 Python multiprocessing.Pool: when to use apply, apply_async or map? 以获得更详细的解释。