У меня есть некоторая фоновая задача, которую я хочу запустить, чтобы можно было безопасно завершить работу с помощью ввода пользователя.Для этого у меня есть поток, в котором запущен пул процессов с непрерывной задачей.Существует блокировка ввода для остановки печати и ожидания ввода пользователя, а также событие для остановки всего процесса.Что меня удивляет, так это то, что процессы, похоже, запускаются и выполняют свою работу, если после запуска потока с Processpool (6-я строка в основном) есть время. Sleep.
import multiprocessing as mp
import time
import threading as tr
def init(e, l):
global stop_event
global input_lock
stop_event = e
input_lock = l
def stupid_task(n):
while not stop_event.is_set():
with input_lock:
print(n)
time.sleep(2)
def test_mng(n, event, lock):
with mp.Pool(n, initializer=init, initargs=(event, lock,)) as p:
print("before")
p.map(stupid_task, range(1, n + 1))
print("after")
p.close()
p.join()
def main():
i_lock = mp.Lock()
s_event = mp.Event()
thread = tr.Thread(target=test_mng, args=(3, s_event, i_lock))
init(s_event,i_lock)
thread.start()
time.sleep(1) # if this line is commented out only "before" is printed
while not stop_event.is_set():
input("")
with input_lock:
print("stopped")
eingabe = input("type q to quit")
if eingabe == "q":
stop_event.set()
if __name__ == "__main__":
main()
Я спрашиваю себя,остановка пула процессов от выполнения его работы.Я делаю что-то в корне неправильно?Time.sleep кажется немного хакерским.