[英]python multiprocessing: sleep statement killed?
我有以下代码:
import multiprocessing, datetime
def Unit_Task_Function(Argument):
print(f"Unit of work {Argument} starting {datetime.datetime.now().strftime('%Y-%m-%d : %H-%M-%S')}")
sleep(2*random.random())
print(f"Unit of work {Argument} ending {datetime.datetime.now().strftime('%Y-%m-%d : %H-%M-%S')}")
if __name__ == "__main__": # Allows for the safe importing of the main module
__spec__ = "ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>)"
print(f"There are {multiprocessing.cpu_count()} CPUs on this machine")
max_para_processes_at_any_time = 5
pool = multiprocessing.Pool(max_para_processes_at_any_time)
iterable_arguments = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'M', 'N']
results = pool.map_async(Unit_Task_Function, iterable_arguments)
pool.close()
pool.join()
输出是:
In [18]: run code.py
There are 8 CPUs on this machine
Unit of work A starting 2020-01-27 : 12-26-02
Unit of work B starting 2020-01-27 : 12-26-02
Unit of work C starting 2020-01-27 : 12-26-02
Unit of work D starting 2020-01-27 : 12-26-02
Unit of work E starting 2020-01-27 : 12-26-02
Unit of work F starting 2020-01-27 : 12-26-02
Unit of work G starting 2020-01-27 : 12-26-02
Unit of work H starting 2020-01-27 : 12-26-02
Unit of work M starting 2020-01-27 : 12-26-02
Unit of work N starting 2020-01-27 : 12-26-02
为什么第二个打印语句从未完成? 这与所谓的“守护进程”进程有关吗? 如何重写代码以使其工作?
你缺少一些进口。 这会导致工作人员出现导入错误,这是您看不到的。 导入这些:
import random
from time import sleep
你这个输出:
There are 8 CPUs on this machine
Unit of work A starting 2020-01-27 : 18-48-21
Unit of work B starting 2020-01-27 : 18-48-21
Unit of work C starting 2020-01-27 : 18-48-21
Unit of work D starting 2020-01-27 : 18-48-21
Unit of work E starting 2020-01-27 : 18-48-21
Unit of work E ending 2020-01-27 : 18-48-21
Unit of work F starting 2020-01-27 : 18-48-21
Unit of work A ending 2020-01-27 : 18-48-22
Unit of work G starting 2020-01-27 : 18-48-22
Unit of work C ending 2020-01-27 : 18-48-22
Unit of work H starting 2020-01-27 : 18-48-22
Unit of work D ending 2020-01-27 : 18-48-22
Unit of work M starting 2020-01-27 : 18-48-22
Unit of work G ending 2020-01-27 : 18-48-22
Unit of work N starting 2020-01-27 : 18-48-22
Unit of work B ending 2020-01-27 : 18-48-22
Unit of work M ending 2020-01-27 : 18-48-23
Unit of work F ending 2020-01-27 : 18-48-23
Unit of work N ending 2020-01-27 : 18-48-24
Unit of work H ending 2020-01-27 : 18-48-24
提示:在切换到pool.map_async()
之前,首先使用pool.map()
查看错误消息。
或者,提供一个重新引发异常的错误回调函数:
def on_error(err):
raise err
results = pool.map_async(Unit_Task_Function,
iterable_arguments,
error_callback=on_error)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.