Это нормально и может произойти, когда ваш пул выполняет __exit__
после выхода из контекстного менеджера.Поскольку рабочие уже закончили свою работу, беспокоиться не о чем.Сам пул вызывает SIGTERM
для работников, у которых нет кода выхода, когда пул проверяет его.Это срабатывает в Pool._terminate_pool
-методе (Python 3.7.1):
# Terminate workers which haven't already finished.
if pool and hasattr(pool[0], 'terminate'):
util.debug('terminating workers')
for p in pool:
if p.exitcode is None:
p.terminate()
Работники пула объединятся несколькими строками позже:
if pool and hasattr(pool[0], 'terminate'):
util.debug('joining pool workers')
for p in pool:
if p.is_alive():
# worker has not yet exited
util.debug('cleaning up worker %d' % p.pid)
p.join()
В сценариикогда вы будете явно вызывать pool.terminate()
, пока ваши работники еще работают (например, вы используете pool.map_async
, а затем используете pool.terminate()
), ваше приложение заблокирует ожидание на p.join()
(если вы в конечном итоге не разрешите своему sigterm_handler
звоните sys.exit())
.
Лучше не связывайтесь с обработчиками сигналов, если вам не нужно.