2017-12-18 1 views
0

Ich mache einige Aufgaben in einer Klasse, die mehrere Prozesse über einen Iterator erzeugt, um zu gewährleisten, dass jeder Eintrag einmal verarbeitet wird. Der Code ist wie:So machen Sie den Klassen-Member-Prozess in Python sicher

import multiprocessing as mp 

Class MyClass(): 
    def __init__(): 
     self.index=[blabla] 
     self.iterator=0 
     self.workers=[mp.Process(target=self.worker, args=(self.lock, args) for i in range(10)] 
    def worker(self, lock, args): 
     # I intend to use lock to make only one subprocs read index 
     # list until iterator goes to next 
     while some_condition: 
      lock.acquire() 
      now_item=self.index[self.iterator] 
      self._next_iter() 
      lock.release() 
      ...# do something on now_item 
    def._next_iter(self): 
     #do some checks and +1 on iterator 

Aber es scheint, dass alle subprocess bei iterator = 0 beginnt und ihre eigenen Loops zu tun. Ich weiß, dass es möglich ist, sie mit einem Queue() Objekt zu synchronisieren, aber was ist, wenn wir es nicht benutzen?

Antwort

0

Prozesse teilen keinen Speicher untereinander. Daher werden Änderungen, die auf eine Variable innerhalb eines Prozesses angewendet werden, nicht an Geschwister weitergegeben.

Um Variablen über Prozesse in Python zu teilen, können Sie sich die vom Modul multiprocessing angebotenen Primitiven ansehen. In Ihrem speziellen Fall sollte eine shared value ausreichen.

Verwandte Themen