Многопроцессорный длительный процесс в фоновом режиме без блокировки - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть функция, которая просто проверяет 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)

Она вызывается в main с помощью:

pool.apply_async(logwatch.run_stop_check, (stop_event,))
...

Идея состоит в том, чтобы вызывать несколько таких функций и запускать их все независимо от основного потока, используя True, в то время как 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), она не делает. он запускается один раз, а затем программа завершается. Я не понимаю, почему это так, или как заставить это делать то, что я намереваюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...