为什么我的python SIGPROF不';不行?
我正在安装SIGPROF信号,并每2秒执行一次处理程序。有什么问题吗为什么我的python SIGPROF不';不行?,python,signals,Python,Signals,我正在安装SIGPROF信号,并每2秒执行一次处理程序。有什么问题吗 1 #!/usr/bin/env python 2 #-*-coding: utf-8 -*- 3 #pylint: disable=W0141,W0613,W0603 4 5 import os 6 import sys 7 import signal 8 import time 9 10 def myhandler(signum, frame): 11 print "my
1 #!/usr/bin/env python
2 #-*-coding: utf-8 -*-
3 #pylint: disable=W0141,W0613,W0603
4
5 import os
6 import sys
7 import signal
8 import time
9
10 def myhandler(signum, frame):
11 print "myhandler"
12 sys.stdout.flush()
13
14 signal.signal(signal.SIGPROF, myhandler)
15 signal.setitimer(signal.ITIMER_PROF, 2, 2)
16 print signal.getitimer(signal.ITIMER_PROF)
17
18 while True:
19 print "sleeping 1..."
20 sys.stdout.flush()
21 time.sleep(1)
这些计时器仅在进程执行时递减,因为它主要处于休眠状态,计时器需要很长时间才能过期,如果您从以下位置移除休眠,它应该可以正常工作: signal.ITIMER_教授 在进程执行和系统代表进程执行时,递减间隔计时器。耦合 尝试:
不,它按预期工作。如所述,ITIMER_教授 在进程执行和 系统正在代表进程执行。外加 ITIMER_VIRTUAL,此计时器通常用于分析所花费的时间 用户和内核空间中的应用程序。SIGPROF于 到期日 由于
sleep
调用导致进程不执行任何操作,因此计时器的递减速度非常缓慢。摆脱睡眠:
#!/usr/bin/env python
#-*-coding: utf-8 -*-
#pylint: disable=W0141,W0613,W0603
import os
import sys
import signal
import time
def myhandler(signum, frame):
print "myhandler"
sys.stdout.flush()
signal.signal(signal.SIGPROF, myhandler)
signal.setitimer(signal.ITIMER_PROF, 2, 2)
print signal.getitimer(signal.ITIMER_PROF)
while True:
continue
然后,当它运行时,您可以看到信号工作:
$ python prof.py
(2.004125, 2.000125)
myhandler
myhandler
如果您想以“实时”方式对其计时(问题不清楚您的目标是什么),而不是处理器时间,请使用并捕获SIGALRM
信号
$ python prof.py
(2.004125, 2.000125)
myhandler
myhandler