我有一个函数可以简单地检查fifo并设置一个事件(如果它看到“停止”消息):
class Logwatch():
...
def run_stop_check(self, stop_event):
flagsint = reduce(lambda x, y: x | y, [os.O_RDONLY, os.O_NONBLOCK])
fifo_path = "/tmp/logwatch_fifo"
fifo_fd = open_fifo(fifo_path, flagsint)
with os.fdopen(fifo_fd) as fifo:
while True:
message = fifo.readline()
if "stop" in message.strip():
logger.debug("Recieved stop request, stopping...")
stop_event.set()
break
sleep(.1)
主要通过以下方式调用:
pool.apply_async(logwatch.run_stop_check, (stop_event,))
...
想法是调用多个此类函数,并使用True无限期地使它们全部独立于主线程运行
pool.apply_async(logwatch.run_stop_check, (stop_event,))
pool.apply_async(something else...
pool.apply_async(another function...
但是,即使run_stop_check
函数应无限期运行(while True
),但事实并非如此。它运行一次,然后程序终止。我不明白为什么会这样,或者如何使它达到我的预期。