RuntimeError en Windows que intenta el multiprocesamiento de Python

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

Estoy probando mi primer programa formal de python utilizando subprocesos y multiprocesamiento en una máquina con Windows. Sin embargo, no puedo iniciar los procesos, y Python muestra el siguiente mensaje. La cosa es que no estoy iniciando mis hilos en el módulo principal. Los subprocesos se manejan en un módulo separado dentro de una clase.

EDITAR: Por cierto, este código funciona bien en ubuntu. No del todo en Windows

RuntimeError: intento de iniciar un nuevo proceso antes de que el proceso actual haya terminado su fase de arranque. Esto probablemente significa que está en Windows y se olvidó de usar el idioma adecuado en el módulo principal: if __name__ == "__main__": freeze_support() ... La línea "freeze_support()" se puede omitir si el programa está no se congelará para producir un ejecutable de Windows. 

Mi código original es bastante largo, pero pude reproducir el error en una versión abreviada del código. Está dividido en dos archivos, el primero es el módulo principal y hace muy poco más que importar el módulo que maneja procesos/subprocesos y llama a un método. El segundo módulo es donde está la esencia del código.


testMain.py:

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

parallelTestModule.py:

importar multiprocesamiento desde importación de multiprocesamiento Importación de procesos clase de subprocesamiento ThreadRunner(subprocesamiento.Subproceso): """ Esta clase representa una sola instancia de un subproceso en ejecución""" def __init__(self, nombre): subprocesamiento.Subproceso.__init__(self) self.nombre = nombre def run(self): print self.name," " class ProcessRunner: """ Esta clase representa una única instancia de un proceso en ejecución """ def runp(self, pid, numThreads): mythreads = [] for tid in range(numThreads): nombre = "Proc-"+str(pid)+"-Thread-"+str(tid) th = ThreadRunner(nombre) mythreads.append(th) for i in mythreads: i.start() for i in mythreads: i.join() class 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": #Esto no funcionó # if __name__ == "__main__": #Esto obviamente no funciona # multiprocessing.freeze_support() #agregado después de ver un error sin resultado para i en myprocs: i.start() para i en myprocs: i.join ()