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?

questionAnswers(3)

yourAnswerToTheQuestion