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

enrico franchi enrico.franchi a gmail.com
Mer 25 Maggio 2016 18:25:30 CEST


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

>
>> Come al solito, passeggiare per la libreria porta spesso a dei bei
> risultati:
>  https://docs.python.org/3.5/c-api/memory.html
> spiega anche bene come si potrebbe fare.
>
>
A me sembra proprio di no.

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?
Che ok... alcune cose possono essere fatte con CAS (tipo i reference
counters); ma, come dicevo, CAS funziona bene quando hai poche scritture e
tante letture. Mentre qui hai un numero relativamente bilanciato delle due
cose. E comunque questo vorrebbe dire anche cambiare l'implementazione di
Object (IIRC non usa roba CAS). Ma le altre?





> >> In Go puoi usare i channel, ma anche qui alla fine usi la memoria
>> >> condivisa, solo che la sincronizzazione è gestita dal runtime.
>> >> Ma sempre in Go, spesso la soluzione più semplice e suggerita in
>> >> mailing list, è quella di usare un mutex.
>> >
>> >
>> > Funziona davvero (in C) per riscrivere spesso, ma inutile se quel che ti
>> > serve (in Python) è lavorare su
>> > troppi dati eguali che cambiano ogni tanto :-(  e vanno riletti spesso.
>>
>
> Sembrerebbe anche qui:
>
> https://docs.python.org/3.5/library/multiprocessing.html#module-multiprocessing.sharedctypes
>
> Che era, in effetti, quel che cercavo.
>

Io continuo a credere che tu stia ficcandoti da solo in un bagno di sangue.
Perche' sei convinto che la memoria condivisa ti *serva*?


>
> Di passaggio vedo che pickle è usato solo per Queue in code FIFO ma che
> la Pipe sottostante non la usa.
>

Si, e' corretto. Il motivo e' che la pipe "astrae meno" e ti da
fondamentalmente un'interfaccia a "byte".
E apre tutto il problema di come separare i messaggi, cosa considerare un
messaggio... nota che le pipe non sono multi reader/multi writer (a meno
che non aggiungi tu sincronizzazione... che vuole dire che di fatto ti
re-implementi le Queue -- nota che per vari motivi le Queue di mp hanno
*anche* un thread per darti la semantica attesa).

 Io personalmente quello che spesso e' fare completamente a mano. Non trovo
le pipe di mp particolarmente utili. In molti casi un socket unix domain a
datagrammi e' proprio la cosa che vuoi, per dire.

Ma insomma... c'e' un po' da capire cosa ti serve, ma in generale non e'
complicato da implementare.



> Ok, appena ho un po' di tempo libero mi ci metto a giocare per vedere
> l'effetto che fa :-)
>
>

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


Maggiori informazioni sulla lista Python