pythonマルチプロセッシングを試行しているWindowsでのRuntimeError

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

Windowsマシンでスレッド化とマルチプロセッシングを使用した最初の正式なPythonプログラムを試しています。しかし、Pythonが次のメッセージを表示しているため、プロセスを起動できません。重要なのは、メインモジュールでスレッドを起動していないということです。スレッドはクラス内の別のモジュールで処理されます。

編集:ちなみに、このコードはubuntuで正常に実行されます。 Windowsでは完全ではありません

  RuntimeError:現在のプロセスがブートストラップフェーズを終了する前に、新しいプロセスを開始しようとしました。これはおそらく、Windowsを使用していて、メインモジュールで適切なイディオムを使用するのを忘れていることを意味します。if__name__ == "__main __":freeze_support()... "freeze_support()"行は、プログラムがWindows実行可能ファイルを生成するためにフリーズされることはありません。  

元のコードはかなり長いですが、コードの要約版でエラーを再現することができました。これは2つのファイルに分割され、最初のファイルはメインモジュールであり、プロセス/スレッドを処理してメソッドを呼び出すモジュールをインポートする以外はほとんど何もしません。 2番目のモジュールは、コードの要点です。


testMain.py:

  import parallelTestModule extractor = parallelTestModule.ParallelExtractor ()extractor.runInParallel(numProcesses = 2、numThreads = 4) 

parallelTestModule.py:

  importマルチプロセッシングからのマルチプロセッシングインポートプロセスインポートスレッドクラスThreadRunner(threading.Thread):"""このクラスは実行中のスレッドの単一インスタンスを表します"""def __init __(self、name):threading.Thread .__ init __(self)self.name = name def run(self):print self.name、 "" class ProcessRunner:"""このクラスは実行中のプロセスの単一インスタンスを表します"""def runp(self、pid、numThreads):mythreads = [] for tid in range(numThreads):name = "Proc-" + str(pid)+ "-Thread-" + str(tid)th = ThreadRunner(name)mythreads.append(th)for i in mythreads:i.start() mythreadsのiの場合:i.join()クラスParallelExtractor:def runInParallel(self、numProcesses、numThreads): myprocs = [] prunner = ProcessRunner()for pid in range(numProcesses):pr = Process(target = prunner.runp、args =(pid、numThreads))myprocs.append(pr)#if __name__ == "parallelTestModule": #これは機能しませんでした#if __name__ == "__main __":#これは明らかに機能しません#multiprocessing.freeze_support()#エラーが発生した後に追加されました()