[Python] pensierino della sera sul multiprocessing, sul cambiare le carte in tavola, sui seg-fault e sulla memoria già condivisa,
alessandro medici
alexxandro.medici a gmail.com
Ven 27 Maggio 2016 23:52:06 CEST
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. L'unica cosa che non ho
visto fare è applicare il metodo __del__, cosa comprensibile, peraltro,
almeno per la salute mentale del memory manager.
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?
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')
Forse salto in aria :)
E poi vedo Enrico leggermi, e che già chiede per me a viva voce un TSO,
pensare ancora più a ragione un 'ma chi me lo fa fare'? Eddai: forza e
coraggio Enrico, ormai sono sulla via della tomba, che quella con la r in
più ormai la vedo raramente :-(
E però sono curioso. E per due mani di pittura dovrebbero bastare poche
ore, come disse il pittore prima di scoprire che si trattava della torre
Eiffel.
Alex
ps: la vera perla però è che ho trovato anche che non mi occorrerà sprecare
tempo e denaro nel mare di sangue per avere un'area dati shared tra
processi, esiste già, si veda:
17.2.1.5. Sharing state between processes¶
<https://docs.python.org/3.5/library/multiprocessing.html#sharing-state-between-processes>
nella pagina che cito poco sopra e poi si dia un ctrl-f su shared memory.
Evidentemente il timore del seg-fault non li ha fermati. Ed, a me, averla
organizzata come array mi va benissimo: il mappare dati in modo diverso nel
Cobol era una delle cose più divertenti da fare nell'epoca di quando ero un
ragazzino. Almeno quando ero vestito.
(Al riguardo dei vestiti il BDFL ed io il abbiamo le stesse idee. E anche
la stessa età :-( :)
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160527/0370de68/attachment-0001.html>
Maggiori informazioni sulla lista
Python