def _init_worker(): """ Initializer for pooled processes. """ # Try to lower the CPU usage priority as much as possible. try: import posix posix.nice(99) except Exception: pass
def operate(self,**kwargs): self.runningThreads+=1 r, w = os.pipe() pid = os.fork() if pid: # PARENT os.close(w) tmpParam = kwargs[self.parameter] r = os.fdopen(r, 'rb') try: tmpResult = cPickle.load(r) except: try: posix.kill(pid, -1) # Kill the child except: pass if self.verbose: self.write("An error occured in job "+str(pid)) # Tell the reader self.jobs.append(kwargs[self.parameter]) # Append the job to be done later self.runningThreads -= 1 # Tell your master that you've one it self.sigPause.set() return os.waitpid(pid, 0) else: # CHILD posix.nice(self.nice) os.close(r) w = os.fdopen(w, 'wb') cPickle.dump(self.function(**kwargs), w, 2) w.close() sys.exit(0) self.writeLock.acquire() self.operate_return(tmpParam, tmpResult) self.runningThreads -= 1 self.sigPause.set() self.writeLock.release()