Я пытаюсь завершить процессы, принадлежащие пулу. Процессы пула выполняют расчеты, и кнопка остановки в графическом интерфейсе должна завершить эти расчеты.
Кажется, самый простой способ сделать это — вызвать pool.terminate(). Эта опция мне недоступна, потому что у меня нет доступа к переменной пула в моей области. Он был создан в файле, который я не хотел бы редактировать.
Я попробовал подход, завершив процессы по идентификатору процесса. Я получаю pids из списка, созданного active_children. Но похоже, что os.kill не влияет, так как все процессы остаются. Где я ошибся / как я могу решить эту проблему? Буду признателен за любую помощь.
Ниже приведен минимальный воспроизводимый пример. Также, если мой пост указывает на очевидный недостаток знаний, это, вероятно, правда, и я извиняюсь. благодарю вас
from multiprocessing import Pool
from multiprocessing import active_children
import os, signal
if __name__ == '__main__':
pool = Pool()
print(active_children())
for process in active_children():
pid = process.pid
os.kill(pid, signal.SIGTERM)
print(active_children()) #same output as previous print statement
pool.terminate()
print(active_children()) #returns an empty list
process.pid
, в списках операционной системы? Если вы работаете в Linux, введитеps -A
в терминале, чтобы узнать. В Windows, может быть, TaskManager? Основываясь на том, что я вижу, опробовав ваш код, возможно, пул просто показывает вам объекты процесса, у которых больше нет процесса. - person Yosef Meller   schedule 25.07.2020