我正在寻找一个简单的python进程,它开始在后台运行,循环计算分钟数。我想发送一个信号(从脚本外部)到进程来打破循环。可能会有许多脚本同时打开和运行。
while True:
timer=timer+1
time.sleep(60)
# listener that receives a signal from outside the program
# to stop the loop return timer and then end the program
if (timeup==True):
break
答案 0 :(得分:2)
您可以使用signal
import signal, time, os
abort = False
def stop(sig, stack):
global abort
print('Got signal!')
abort = True
signal.signal(signal.SIGUSR1, stop)
print('My pid: %s' % os.getpid())
while True:
time.sleep(1)
print('Hello')
if (abort):
break
将输出如下内容:
[~]% python test.py
My pid: 24341
Hello
Hello
Hello
然后,您可以使用kill(1)
发送信号:
[~]% kill -USR1 24341
据我所知,没有明显的方法可以从Python发送信号,但你可以使用subprocess
模块启动kill
(有点难看,但有效)。
顺便说一下,你可以在PHP中使用相同的技术。请参阅pcntl_signal()
(您需要安装pcntl
模块。)
另见:
您可以使用的其他进程间通信(IPC)方法可能是:
我不打算提供所有这些示例,恕我直言,使用信号是这里最明显的选择。