[Python] Lanciare script da altro script

enrico franchi enrico.franchi a gmail.com
Lun 2 Mar 2015 15:39:31 CET


2015-03-02 11:54 GMT+00:00 Balan Victor <balan.victor0 a gmail.com>:

>
> > Diro' di piu'... se le cose continuano ad andare in questa direzione,
> smettero' di fare Python per qualcosa che e' piu' di uno script o al limite
> una web UI leggera. Ci sono troppe cose con vanno come dico io.
>
> Cioč?
>
Il problema principale e' che Python manca di una buona primitiva di
concorrenza "universale". I Thread funzionano male in modo specifico in
Python, e in generale sono una primitiva molto old-school. Tanto che per
dire in Java hanno costruito tutto un mondo per cui i thread si riescono a
vedere poco. I processi funzionano meglio sotto molti punti di vista, ma
anche li... gevent e' un framework che per molti versi ti costringe a fare
quello che fai con i framework. Twisted pure lui e' un framework.

Quindi... sto scrivendo uno script di utility? Posso usare facilmente
gevent (perche' ho completo controllo dello script: e' un processo unix che
creo io e che fa cose). Ma posso usare anche multiprocessing senza grossi
problemi. Ecco, ora voglio estrarre in una libreria per rendere tutto piu'
generale. Bene... che faccio? Dipendo da gevent? E la libreria andra' a
fare a cazzotti con qualcun altro (tipo grequests fa monkey patching
automatico del mondo e tanti saluti). Non posso farlo. Ok, allora uso
multiprocessing. Hei, ma siamo sicuri che voglio che chi chiama le mie
funzioni si trovi sotto il naso un set di workers? Ci ho avuto incubi di
memoria per sta roba. Ma dai, uso i threads... ma sono sicuro di essere I/O
bound e non CPU bound. Si... hei, ma quell'altra libreria che uso usa
multiprocessing, quindi sono a rischio di deadlock se faccio cose anche
banali tipo loggare.

Ecco... potrei scrivere un adapter che mi permette di fare pluggare il
modello di concorrenza dal chiamante. Non e' *troppo* doloroso. Se avessi
tempo potrei anche farlo una volta per tutte. Poi certo... ci vuole un
qualche tipo di sistema di dependency injection perche' non voglio
assolutamente che due chiamanti facciano cose non compatibili... bene.

Oppure uso celery. Quindi per la cosa piu' deficiente che devo fare mi
trovo fra le palle un sistema di code, celery, i worker. E poi anche li,
saro' io, ma celery ha un mucchio di problemi per i fatti suoi.

E tutto questo per fare una cosa cretina come chiamare un servizio rest da
un'app django, non stiamo parlando di rocket science.







-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150302/e1de0e52/attachment.html>


Maggiori informazioni sulla lista Python