Я работаю над renderfarm, и мне нужны мои клиенты, чтобы иметь возможность запускать несколько экземпляров средства визуализации без блокировки, чтобы клиент мог получать новые команды. У меня это работает правильно, однако у меня возникают проблемы с завершением созданных процессов.
На глобальном уровне я определяю свой пул (чтобы я мог получить к нему доступ из любой функции):
p = Pool(2)
Затем я вызываю свой рендерер с помощью apply_async:
for i in range(totalInstances):
p.apply_async(render, (allRenderArgs[i],args[2]), callback=renderFinished)
p.close()
Эта функция завершается, запускает процессы в фоновом режиме и ждет новых команд. Я сделал простую команду, которая убьет клиента и остановит рендеринг:
def close():
'close this client instance'
tn.write ("say "+USER+" is leaving the farm\r\n")
try:
p.terminate()
except Exception,e:
print str(e)
sys.exit()
sys.exit()
Кажется, что он не дает ошибку (она выведет ошибку), python завершается, но фоновые процессы все еще работают. Может ли кто-нибудь рекомендовать лучший способ управления этими запущенными программами?