Я использую BaseManager для совместного использования очереди с пулом рабочих процессов. Я вызываю start() на нем, чтобы менеджер работал в другом потоке.Многопроцессорное завершение работы BaseManager() занимает двадцать секунд
В разделе shutdown() документация гласит: «Это доступно только в том случае, если для запуска процесса сервера был использован start()». Однако, если я вызываю shutdown(), процесс переднего плана будет блокировать процесс менеджера за двадцать секунд до завершения, каждый раз. Если я не вызываю shutdown(), процесс переднего плана уходит немедленно?
Что мне не хватает?
Также есть ли у кого-нибудь идеи, почему в документации говорится: «Это можно назвать несколько раз»? Почему вы отправляете несколько сигналов выключения в процесс менеджера?
Я ничего не вижу в вызове выключения или создании процесса, указывающего задержку. Что заставляет вас думать, что это по дизайну? Когда я не вызываю shutdown(), никакие процессы, кажется, остаются открытыми. Я сомневаюсь в важности даже вызова. –
Выключение вызывает 'util._run_finalizers (0)' для запуска финализаторов, которые были объявлены для процесса запуска. Теперь, если вы хотите обратиться к защите от запуска, вы заметите, что есть регистрация финализаторов, которые называет '_finalize_manager', который имеет параметр таймаута, используемый при ожидании автоматического закрытия диспетчера, прежде чем прибегать к завершению() –
Отлично. Спасибо за это разъяснение, Тревис. –