从监听器循环中断

时间:2014-02-20 22:36:33

标签: python linux

我正在寻找一个简单的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

1 个答案:

答案 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)方法可能是:

  • 状态为
  • 的文件
  • 共享内存
  • FIFO
  • 通过网络发送数据(当两个程序在同一台机器上时也能正常工作)

我不打算提供所有这些示例,恕我直言,使用信号是这里最明显的选择。