kończy się pula wieloprocesorowa Pythona
Pracuję nad farmą renderującą i potrzebuję moich klientów, aby mogli uruchamiać wiele wystąpień renderera, bez blokowania, aby klient mógł otrzymywać nowe polecenia. Mam to działa poprawnie, jednak mam problemy z zakończeniem utworzonych procesów.
Na poziomie globalnym definiuję moją pulę (dzięki czemu mogę uzyskać do niej dostęp z dowolnej funkcji):
p = Pool(2)
Następnie wywołuję mój renderer z apply_async:
for i in range(totalInstances):
p.apply_async(render, (allRenderArgs[i],args[2]), callback=renderFinished)
p.close()
Ta funkcja kończy się, uruchamia procesy w tle i czeka na nowe polecenia. Zrobiłem proste polecenie, które zabije klienta i zatrzyma renderowanie:
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()
Wydaje się, że nie daje błędu (wydrukuje błąd), python kończy się, ale procesy w tle nadal działają. Czy ktoś może polecić lepszy sposób kontrolowania tych uruchomionych programów?