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? 以获得更详细的解释。
我有一个程序,我想在其中 运行 一个函数并行处理多个参数。
节目格式如下:
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? 以获得更详细的解释。