[Python] pensierino della sera sul multiprocessing, sul cambiare le carte in tavola, sui seg-fault e sulla memoria già condivisa,

Manlio Perillo manlio.perillo a gmail.com
Sab 28 Maggio 2016 20:14:49 CEST


2016-05-27 23:52 GMT+02:00 alessandro medici <alexxandro.medici a gmail.com>:
> Stasera, giusto per prender sonno, stavo leggendo Python Parallel
> Programm.... etc. etc. Comprato in una svendita online col 75% di sconto :-)
>
> [NON E' PUBBLICITA': Scritto bene nella parte teorica e nello spiegare, a
> parte qualche sassolino. Almeno per quel che ne posso dire io. Molto meno
> bene (quasi pessimo?) nel codice stampato, poco meglio lo scaricabile. Poco
> importa però e forse: sciocchezze e questioni di stile, e mi sembra anche
> che da qualche parte scriva che il suo testo non sia proprio da neofiti]
>
> Ma sorry: vedo anche due cose:
>
> 1° è l'uso estensivo dei dizionari creati nel processo padre ed aggiornati
> dai processo figlio, sia nelle voci che nel contenuto. Un giro rapido e,
> stupore, non solo i dizionari, ma anche liste.

Scusa, ma hai letto la documentazione del modulo multiprocessing?

Ci sono due modi per condividere oggetti:
https://docs.python.org/3/library/multiprocessing.html#sharing-state-between-processes

Il primo utilizza memoria condivisa protetta da lock, e funziona solo
per tipi primitivi:
https://docs.python.org/3/library/multiprocessing.html#shared-ctypes-objects

Il secondo fa uso essenzialmente di message passing:
https://docs.python.org/3/library/multiprocessing.html#managers

Il modulo offre semplicemente degli oggetti che si comportano come
dict o come list

> L'unica cosa che non ho visto
> fare è applicare il metodo __del__, cosa comprensibile, peraltro, almeno per
> la salute mentale del memory manager.

Non c'è nessun memory manager, e __del__ è supportato senza problemi
perchè altrimenti non sarebbe un dict.

> Ecco: basterebbe FORSE creare un'altro dizionario delle voci che andrebbero
> cancellate e poi, magari, farlo dopo?

?

> Ok, 1° compito prima delle vacanze: Ma i dizionari sono pressoché gli unici
> oggetti composti che si possono aggiornare in multiprocess?
>

Vedi sopra.
Semplicemente dict e list sono predefiniti perchè i più richiesti.

> La 2° viene dall'altra idea:
> Mi era venuto subito in mente quando lessi l'articolo che postai qualche
> giorno addietro, quel qualcosa sul cambiare le ruote alla bici mentre si
> pedala:
> http://mathamy.com/python-wats-mutable-default-arguments.html
> cosa succederebbe se cambiassi le variabili di default di una classe o di un
> metodo mentre la loro progenie è occupata in un processo? Magari in una ABC
> genitore?
>
> Forse nulla. Forse dipenderà dal metodo con cui si lanceranno i processi?
> (https://docs.python.org/3.5/library/multiprocessing.html#the-spawn-and-forkserver-start-methods
> usa inherits ma non chiarisce se intende 'copiare' o 'linkare')
>

> [...]

Ti consiglio di leggere un buon libro su come ci si interfaccia con il
kernel di un sistema UNIX.
Ad esempio
The Linux Programming Interface: A Linux and UNIX System Programming Handbook
o il classico
Advanced Programming in the UNIX Environment


Ciao  Manlio


Maggiori informazioni sulla lista Python