Persistent variable in subprocess using multiprocessing?

Diez B. Roggisch deets at nospam.web.de
Wed Jul 15 16:22:46 EDT 2009


mheavner schrieb:
> I'm using multiprocessing to spawn several subprocesses, each of which
> uses a very large data structure (making it impractical to pass it via
> pipes / pickling). I need to allocate this structure once when the
> process is created and have it remain in memory for the duration of
> the process. The way the multiprocessing module is set up, only the
> 'run' method runs within the subprocess - so creating a wrapper class
> with a constructor that allocates the structure in __init__ will not
> work, as far as I know, as this will still be within the parent
> process.
> 
> If I were working in C/C++, I would declare the variable "static"
> within the function body - is there any way with the multiprocessing
> module to have persistent data members within subprocesses?

Works for me, at least under OSX (and I presume *nixes in general work.) 
No idea about Windows.


The thing to keep in mind is that forking is used, and that 
interpreter-state up to the moment of the fork is the same for all 
subprocesses.



from multiprocessing import Process

class MyProcess(Process):


     def __init__(self, huge_shared_state):
         self.huge_shared_state = huge_shared_state
         super(MyProcess, self).__init__()


     def run(self):
         print self.name, len(self.huge_shared_state)




shared_state = range(1000000)

processes = []
for i in xrange(10):
     p = MyProcess(shared_state)
     p.start()
     processes.append(p)


for p in processes:
     p.join()



Diez



More information about the Python-list mailing list