zoukankan      html  css  js  c++  java
  • The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable

     1 from multiprocessing import Pool
     2 import os, time, random
     3 
     4 
     5 def worker(msg):
     6     t_start = time.time()   # 获取开始时间
     7     print("%s开始执行,进程号为%d" % (msg, os.getpid()))
     8     # random.random()随机生成0~1之间的浮点数
     9     time.sleep(random.random()*2)
    10     t_stop = time.time()   # 获取执行结束时间
    11     print(msg, "执行完毕,耗时%.2f" % (t_stop-t_start))
    12 
    13 
    14 po = Pool(3)   # 定义一个进程池,最大进程数是3
    15 for i in range(0, 10):
    16     po.apply_async(worker, (i,))
    17 
    18 print("___start___")
    19 po.close()
    20 po.join()
    21 print("___end___")

    运行如上代码时会报以下错误信息:

    RuntimeError: 
            An attempt has been made to start a new process before the
            current process has finished its bootstrapping phase.
    
            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.

    从错误信息可以看出进程池相关代码应该放在if __name__ == '__main__'下面,那么可以将进程池运行相关代码放在main函数下面,代码修改如下:

     1 from multiprocessing import Pool
     2 import os, time, random
     3 
     4 
     5 def worker(msg):
     6     t_start = time.time()   # 获取开始时间
     7     print("%s开始执行,进程号为%d" % (msg, os.getpid()))
     8     # random.random()随机生成0~1之间的浮点数
     9     time.sleep(random.random()*2)
    10     t_stop = time.time()   # 获取执行结束时间
    11     print(msg, "执行完毕,耗时%.2f" % (t_stop-t_start))
    12 
    13 
    14 def main():
    15     # 定义一个进程池,最大进程数是3
    16     po = Pool(3)
    17     for i in range(0, 10):
    18         po.apply_async(worker, (i,))
    19 
    20     print("___start___")
    21     po.close()
    22     po.join()
    23     print("___end___")
    24 
    25 
    26 if __name__ == '__main__':
    27     main()
  • 相关阅读:
    halcon中variation_model_single实例注释.
    vc 实现打印功能
    用VisualC++建立SOAP客户端应用(一)
    第六章
    OpenCV】透视变换 Perspective Transformation(续)
    第六章
    OpenCV仿射变换+投射变换+单应性矩阵
    【最新图文教程】WinCE5.0中文模拟器SDK(VS2008)的配置
    Visual Studio 2008 使用 WinCE 5.0 Emulator
    Win32 CMD批处理命令
  • 原文地址:https://www.cnblogs.com/zzmx0/p/12663478.html
Copyright © 2011-2022 走看看