首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GNU并行和Python atexit

GNU并行和Python atexit
EN

Stack Overflow用户
提问于 2021-09-02 06:40:17
回答 1查看 119关注 0票数 3

我试图用GNU并行运行一个python脚本。除了在python脚本中使用的atexit例程之外,一切似乎都正常。在ctrl+c之后,parallel似乎正在杀死python进程,而没有给python一个调用注册的atexit例程的机会。如何对子进程进行更好的并行处理?

这里有一个例子来说明这种行为。

test_signal.py:

代码语言:javascript
复制
#!/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])

使用以下命令测试:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 11:12:58

GNU并行终止--termseq中指定的作业。默认为:

代码语言:javascript
复制
TERM,200,TERM,100,TERM,50,KILL,25

SIGTERM,等待200毫秒,SIGTERM,等待100毫秒,SIGTERM,等待50毫秒,SIGKILL,等待25毫秒。如果进程在等待期间死亡,GNU并行将忽略序列的其余部分-不需要杀死一匹死马。

--termseq更改为您要发送的信号以及它们之间的时间间隔。

CTRL-C发送SIGINT,因此这应该是有效的:

代码语言:javascript
复制
# Give 1 second to clean up, then kill
parallel --termseq INT,1000,KILL,25 ...

请注意,除非使用--ungroup,否则您将看不到输出。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69025283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档