【问题标题】:Multiprocessing runtime error freeze_support() in Mac 64 bitMac 64 位中的多处理运行时错误 freeze_support()
【发布时间】:2021-04-26 06:38:23
【问题描述】:

我正在尝试在 MacOS 上学习线程和多处理。我无法启动这些进程,python 给出了以下错误消息。

错误

运行时错误: 已尝试在 当前进程已完成其引导阶段。

    This probably means that you are not using fork to start your
    child processes and you have forgotten to use the proper idiom
    in the main module:

        if __name__ == '__main__':
            freeze_support()
            ...

    The "freeze_support()" line can be omitted if the program
    is not going to be frozen to produce an executable. 

我的代码: parallel_processing.py

import multiprocessing
import time

start= time.perf_counter()

def do_something():
    print('sleeping 1 sec....')
    time.sleep(1)
    return('done sleeping...')

# do_something()
p1 = multiprocessing.Process(target = do_something)
p2 = multiprocessing.Process(target = do_something)

p1.start()
p2.start()

finish= time.perf_counter()

print(f'finished in {finish-start} seconds')

【问题讨论】:

    标签: macos python-multiprocessing python-3.8


    【解决方案1】:

    您似乎可以通过将代码放入块 if __name__ == '__main__' 来解决此问题。例如:

    import multiprocessing as mp
    import time
    
    def do_something():
    ...
          
    if __name__ == '__main__':
      p1 = mp.Process(target=do_something)
      p2 = mp.Process(target=do_something)
    
      p1.start()
      p2.start()
      ...
    

    我不确定这是由于最近的 macOS 更新或 python 造成的,但它似乎与操作系统如何创建新线程有关,即 forkingspwaning。详情请见this blog post

    【讨论】:

      猜你喜欢
      • 2019-08-30
      • 2013-02-23
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      • 2015-09-02
      • 2014-12-20
      相关资源
      最近更新 更多