我尝试使用GNU parallel运行一个Python脚本,似乎一切正常,除了在Python脚本中使用的atexit例程。似乎在ctrl+c之后,parallel会杀死Python进程而不给Python调用已注册的atexit例程的机会。
如何让parallel对子进程更友好?
这里有一个示例来展示这种行为。
test_signal.py:
#!/usr/bin/env python3
import time
import sys
import atexit
def cleanup():
print('cleanup called', flush=True)
atexit.register(cleanup)
time.sleep(60)
print('completed process', sys.argv[1])
使用以下命令进行测试:
chmod +x test_signal.py
./test_signal.py 1 # this works as expected when using ^C
parallel -j 4 ./test_signal.py {} ::: $(seq 1 12) # this one does not
killall -HUP parallel
代替Ctrl-C。 - Mark Setchell