如何处理进程收到SIGSTOP和SIGCONT时的超时?

2024-10-04 01:35:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些Python代码线程。计时器为一个操作实现60秒超时。在

问题是,此代码在作业控制环境中运行,在该环境中,它可能会被优先级较高的作业抢占。在这种情况下,它将被发送到SIGSTOP,然后过一段时间,SIGCONT。我需要一种方法,以某种方式注意到这种情况已经发生并重置超时:显然,如果操作被暂停了整整60秒,那么它并没有真正超时。在

我试图为SIGCONT添加一个信号处理程序,但这似乎是在提供给线程。计时器已经被执行。在

有什么方法可以达到这个目的吗?在


Tags: 方法代码程序目的环境作业方式情况
3条回答

您需要重新考虑您请求的内容;超时反映了已用时间(墙时间);您希望知道进程使用的时间。在

幸运的是,您可以使用getrusage:http://docs.python.org/library/resource.html来测量这一点

您仍然需要设置一个超时;当超时返回时,测量自操作开始以来用户或系统时间使用量的增加量,如果超过限制,则终止操作,否则请适当地重新安排超时时间。在

一个相当简单的答案是,我在发布这篇文章后,简单地将计时器分成多个子计时器,例如,有10个6秒计时器,每个计时器在一个链中启动下一个计时器。这样的话,如果我被停职,我只会失去一个计时器,而且在超时之前我仍会等待大部分时间。在

这当然不是万无一失的,尤其是如果我被反复暂停和重新启动,但这很容易做到,而且似乎已经足够好了。在

如果应用程序是多线程的,the docs表示:

only the main thread can set a new signal handler, and the main thread will be the only one to receive signals

确保您正在处理来自主线程的信号。在

相关问题 更多 >