最近写了一个多进程调用另一个python函数的脚本,
由于这个python函数我希望设置Timeout,使用了timeout_decorator库,
该库使用signal实现。
而python的multiprocessing库在调用包含signal的进程时会出现死锁问题。
我的代码见gist。
在网上遇到类似的问题:
- https://stackoverflow.com/questions/39230902/multiprocessing-join-deadlock
- https://bugs.python.org/issue29759
两处修改:
修改pool.py仍未解决问题,最后用os.system把cfa_diff当做系统脚本调用,使用bash的timeout来实现超时控制。注意超时返回值为整数31744,函数原来返回值10在bash中为2560。
Typo:
- Python的with语句默认加锁,在打开文件时建议使用保证进程安全
1
2with open(file, 'w') as writer:
# some code