python进程池multiprocessing.Pool运行错误:The "freeze_support()" line can be omitted if the program is not g

来源:互联网 发布:java对象锁和类锁 编辑:程序博客网 时间:2024/05/18 19:45

测试代码如下:

# -*- coding: utf-8 -*-import multiprocessingimport timedef func(msg):    print('msg: ', msg)    time.sleep(1)    print('----')pool = multiprocessing.Pool(processes=4)for i in range(10):    msg = 'hello world %d' % i    pool.apply_async(func, (msg, ))pool.close()pool.join()


上面的代码运行将产生如下错误信息:

RuntimeError:         An attempt has been made to start a new process before the        current process has finished its .        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__'下面,代码修改如下:

# -*- coding: utf-8 -*-import multiprocessingimport timedef func(msg):    print('msg: ', msg)    time.sleep(1)    print('----')if __name__ == '__main__':    pool = multiprocessing.Pool(processes=4)    for i in range(10):        msg = 'hello world %d' % i        pool.apply_async(func, (msg, ))    pool.close()    pool.join()

0 0