<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><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></div></div></blockquote><div>questo della concorrenza universale è un problema però come ha scritto #Enrico Bianchi asyncio è stato introdotto nella libreria standard e alcuni punti che hai elencato vanno a cadere. Certo scrivere codice asincrono porta dietro i suoi problemi.</div><div><br></div><div>Io poi non sono un grande esperto di linguaggi di programmazione ma da quel poco che ho visto python no è l'unico ad avere questo problema ... a meno che il linguaggio non sia stato scritto con l'idea della concorrenza.</div><div><br></div></div>
</div></div>