在后台多处理长时间运行的进程而不会阻塞

时间:2020-02-21 17:55:20

标签: python python-multiprocessing

我有一个函数可以简单地检查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),但事实并非如此。它运行一次,然后程序终止。我不明白为什么会这样,或者如何使它达到我的预期。

0 个答案:

没有答案