【发布时间】:2020-09-19 09:53:51
【问题描述】:
我有一个简单的函数,我打算使用 Python 多处理模块并行运行。但是我收到以下错误RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. 该错误表明我添加了这个:
if __name__ == '__main__':
freeze_support()
大多数在线帖子都建议像这样 SO answer。
我添加了它并且它可以工作,但我似乎不明白为什么这么简单的一段代码需要它。
没有 __name__=="__main__" 的代码(抛出 RuntimeError)
import multiprocessing
import time
start = time.perf_counter()
def do_something():
print('Sleeping 1 second...')
time.sleep(1)
print('Done sleeping...')
p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)
p1.start()
p2.start()
finish = time.perf_counter()
print(f'Finished in {round(finish - start, 2)} second(s)')
带有 __name__=="__main__" 的代码(不抛出 RuntimeError)
import multiprocessing
import time
start = time.perf_counter()
def do_something():
print('Sleeping 1 second...')
time.sleep(1)
print('Done sleeping...')
def main():
p1 = multiprocessing.Process(target=do_something)
p2 = multiprocessing.Process(target=do_something)
p1.start()
p2.start()
finish = time.perf_counter()
print(f'Finished in {round(finish - start, 2)} second(s)')
if __name__ == "__main__":
main()
【问题讨论】:
-
你在第一个脚本中有缩进吗?
do_something创建一个调用do_something等的进程,这会很快爆炸,除非没有对do_something的顶级调用,因此不会创建进程。
标签: python python-3.x python-2.7 multiprocessing python-multiprocessing