Возможно, я где-то допускаю тривиальную ошибку, но даже минимальный пример использования multiprocessing.Manager
в блоке with
(или без) иногда приводит к появлению сообщения об ошибке:
import logging
import multiprocessing
def test():
logger = multiprocessing.log_to_stderr()
logger.setLevel(logging.INFO)
with multiprocessing.Manager() as m:
print("Shutdown")
print("Done")
if __name__ == "__main__":
test()
ожидаемый результат (происходит большую часть времени):
[INFO/SyncManager-1] child process calling self.run()
[INFO/SyncManager-1] created temp directory /tmp/pymp-ovckulfx
[INFO/SyncManager-1] manager serving at '/tmp/pymp-ovckulfx/listener-2huadgai'
Shutdown
[INFO/MainProcess] sending shutdown message to manager
[INFO/SyncManager-1] process shutting down
[INFO/SyncManager-1] process exiting with exitcode 0
Done
[INFO/MainProcess] process shutting down
неожиданный результат (иногда бывает):
[INFO/SyncManager-1] child process calling self.run()
[INFO/SyncManager-1] created temp directory /tmp/pymp-1781pg20
[INFO/SyncManager-1] manager serving at '/tmp/pymp-1781pg20/listener-w5fsqqpv'
Shutdown
[INFO/MainProcess] sending shutdown message to manager
[INFO/SyncManager-1] process shutting down
[INFO/SyncManager-1] Failure to send message: ('#RETURN', None)
[INFO/SyncManager-1] ... request was (None, 'shutdown', (), {})
[INFO/SyncManager-1] ... exception was BrokenPipeError(32, 'Broken pipe')
[INFO/SyncManager-1] process exiting with exitcode 0
Done
[INFO/MainProcess] process shutting down
Я использую Python 3.6.5 (по умолчанию, 6 июля 2018, 09:41:10), [GCC 5.4.0 20160609] в Linux