[Python] Decorated Concurrency - Python multiprocessing made really really easy

enrico franchi enrico.franchi a gmail.com
Ven 27 Maggio 2016 14:41:40 CEST


2016-05-25 18:02 GMT+01:00 alessandro medici <alexxandro.medici a gmail.com>:

>
>>
>> Scusa... parliamoci chiaro. Diciamo che hai scritto un allocatore che
>> lavora su un chunk di memoria condivisa.
>> Che vuole anche dire condivisa fra piu' processi (se no non e'
>> particolarmente interessante).
>>
>> Mi spieghi come hai intenzione di fare si che tutto questo non si rompa
>> male *senza* usare lock?
>>
>
> Scrivendoci sopra solo quando NON ho altri processi che ci lavorano.
>

Scusa, e come fai a sapere che gli altri processi *non* ci lavorano?



> Per esempio lanciando
> gli altri processi dopo averci scritto sopra, ed ovviamente non parlo
> di allocare nello heap di python (faccio riferimento al primo esempio
> nella pagina).
>

Quindi stiamo parlando di un oggetto che scrivi in questa area condivisa
(qui c'e' un solo processo).
Poi crei altri processi, che pero' non possono fare *nulla* con
quell'oggetto. Perche'? Perche' anche semplicemente fare f(obj) ha effetto
sul reference counting.
Ma anche o = obj.

Quindi gli altri processi non possono manco referenziare sto oggetto; non
lo possono vedere.

Ok... sto barando. Potresti avere questo oggetto "magico" nell'area
condivisa e poi passarti oggettini che sono solo riferimenti a
quell'oggetto (ma che a loro volta non sono condivisi).

Il problema sarebbe che non hai la semantica di Python (e.g., non puoi
aggiungere, togliere un attributo...). Sarebbe un oggetto puramente
immutabile. Immutabilissimo.
E allora quale e' il vantaggio di averlo cacciato in memoria condivisa?
Puoi fare cose piu' semplici.

E non puoi nemmeno avere cose tipo il creatore modifica. Perche'? Perche'
dovresti garantire che tutte le modifiche sono atomiche. Ora, siccome non
hai lock, non puoi "rendere atomica dal punto di vista di chi legge".
Puoi *solo* usare cose atomiche per davvero. Tipo, non puoi facilmente
avere un dizionario Python... in Python molte operazioni sui dizionari sono
atomiche, perche' hai il GIL. Ma in questo caso... il GIL non ce lo hai.
Quindi....

Quindi per fare qualcosa di vagamente utile dovresti risolvere gli stessi
problemi che devono risolvere quelli che vogliono levare il GIL.

Perche' scusa... se sai fare una libreria che ti consente di avere oggetti
condivisi fra processi *senza* bisogno di lock, allora direi che sai anche
fare una libreria che ti consente di condividere oggetti fra thread *senza*
bisogno di lock.
E a questo punto hai finito, hai vinto. Hai ucciso il GIL.


>
-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160527/47826747/attachment-0001.html>


Maggiori informazioni sulla lista Python