Python çoklu işlemeyi deneyen pencerelerde RuntimeError

| | | | | | | | | | | | | | | | | | | |

Bir windows makinesinde Threading ve Multiprocessing kullanarak ilk resmi python programımı deniyorum. Python aşağıdaki mesajı verirken süreçleri başlatamıyorum. Mesele şu ki, ileti dizilerimi ana modülde başlatmıyorum. Konular bir sınıf içinde ayrı bir modülde işlenir.

EDIT: Bu arada bu kod ubuntu'da sorunsuz çalışır. Windows'ta pek değil

RuntimeError: Mevcut işlem önyükleme aşamasını bitirmeden yeni bir işlem başlatmayı deneyin. Bu muhtemelen Windows'ta olduğunuz ve ana modülde uygun deyimi kullanmayı unuttuğunuz anlamına gelir: if __name__ == "__main__": frost_support() ... Eğer program açıksa "freeze_support()" satırı atlanabilir. Bir Windows yürütülebilir dosyası üretmek için dondurulmayacak. 

Orijinal kodum oldukça uzun, ancak hatayı kodun kısaltılmış versiyonunda yeniden oluşturabildim. İki dosyaya bölünmüştür, ilki ana modüldür ve işlemleri/iş parçacığını işleyen ve bir yöntemi çağıran modülü içe aktarmaktan başka çok az şey yapar. İkinci modül, kodun etinin olduğu yerdir.


testMain.py:

paralelTestModule çıkarıcıyı içe aktar = parallelTestModule.ParallelExtractor () extractor.runInParallel(numProcesses=2, numThreads=4) 

parallelTestModule.py:

import çok işlemli içe aktarmadan çoklu işlem İşlem içe aktarma iş parçacığı sınıfı ThreadRunner(threading.Thread): """ Bu sınıf, çalışan bir iş parçacığının tek bir örneğini temsil eder""" def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): print self.name," " class ProcessRunner: """ Bu sınıf, çalışan bir sürecin tek bir örneğini temsil eder """ def runp(self, pid, numThreads): mytreads = [] tid için in range(numThreads): name = "Proc-"+str(pid)+"-Thread-"+str(tid) th = ThreadRunner(name) mythreads.append(th) i için mythreads: i.start() mytreads'de i için: i.join() class ParallelExtractor: def runInParallel(self, numProcesses, numThreads): myprocs = [] prunner = pid in range(numProcesses için ProcessRunner()): pr = Process(target=prunner.runp, args=(pid, numThreads)) myprocs.append(pr) # if __name__ == "parallelTestModule": #Bu işe yaramadı # if __name__ == "__main__": #Bu açıkça çalışmıyor # multiprocessing.freeze_support() # myprocs'ta i için boşuna olmadığını gördükten sonra eklendi: myprocs'ta i.start() için i.join: i.join ()