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