<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-03-02 11:54 GMT+00:00 Balan Victor <span dir="ltr"><<a href="mailto:balan.victor0@gmail.com" target="_blank">balan.victor0@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><p dir="ltr"><br>
> 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.</p>
</span><p dir="ltr">Cioè?</p></blockquote><div>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.</div><div><br></div><div>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. </div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>E tutto questo per fare una cosa cretina come chiamare un servizio rest da un'app django, non stiamo parlando di rocket science. </div><div><br></div><div><br></div><div><br></div><div><br></div><div> </div></div><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>