2014-05-20 10:30 GMT+01:00 Balan Victor <balan.vict...@gmail.com>:

Ogni task non va altro che lanciare un'altro processo di windows, e resta
> attivo finché questo non ha finito. Se usassi celery/multiprocessing
>  raddoppierei il numero di processi(e non è esattamente quello che voglio).
>

Ma quindi gira su linux o su windows sta roba?
Comunque, celery e multi-processing sono due oggetti molto diversi.

In particolare su linux con multiprocessing non raddoppi il numero dei
processi. Su windows pare pure.
Non sei *obbligato* a fare una fork prima di fare la execv*.

Con celery hai talmente tante opzioni che si puo' dire tutto e il contrario
di tutto. Verosimilmente c'e' anche quello che ti serve.

Il problema e' che, immagino, non avrai processi che lanci e poi lasci
morire senza sapere che cavolo e' successo. E avere una coda ti aiuta anche
per avere informazioni dai processi. Se muore tutto, hai lo stato in un db
esterno che puoi andare a vedere. Insomma... ci si puo' sempre reinventare
la ruota, ma almeno tentiamo di non reinventarla quadrata.

Poi per inciso, io sarei molto dubbioso di un design in cui se lanci N
processi e se lanci 2N processi sei nella guazza. Capisco che per un certo
valore k di N effettivamente questa cosa succede in modo naturale, pero'
partirei dimensionando le risorse opportunamente e/o scegliendo
un'architettura che sai che puoi fare scalare. Tipo se hai una coda
condivisa, quando vuoi aggiungere una macchina con dei worker (e dividi
grosso modo il numero di processi per x+y/x, se aggiungi y macchine e avevi
x macchine) beh, diventa facile. Se hai tutto hardcoded e fatto a mano...
beh, non lo fai. :) O meglio, sputi sangue quando vuoi farlo.



> Non usare i thread. ;)
>  ogni altro suggerimento è ben accetto ;)
>

Te ne ho dati un po'.


-- 
.
..: -enrico-
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a