Hi Krace, I am still not understanding from code (practical example) where we are getting the benefit of PAUSE and let other greenlet to execute.
I have created a simple worker program from your example https://github.com/dcramer/taskmaster/blob/79a312c5cb3c34d00829fe9cf4204aeb478a0166/src/taskmaster/client.py#L26 . This code has two pause (gevent.sleep(0)), in Consumer.start and Worker.run. Here control goes to Worker.run when Consumer.start pauses and Consumer.start gets control back when Worker.run pauses. There may be benefit from this switching, but I am still not understanding it. Please check the attached code and output. Is my example code valid ? CODE ====== import gevent class Worker(object): def __init__(self, consumer, target): self.consumer = consumer self.target = target def run(self): print "Worker.run, START" self.started = True while self.started: print "Greenlet thread (from Worker.run) Pauses, START" gevent.sleep(0) print "Greenlet thread (from Worker.run) Pauses, END" job = self.consumer.get_job() self.target(job) print "Worker.run, END" class Consumer(object): def __init__(self, target): self.target = target def start(self): print "Consumer.start, START" self.started = True worker = Worker(self, self.target) gevent.spawn(worker.run) while self.started: print "Main Interpreter greenlet (from Consumer.start) Pauses, START" gevent.sleep(0) print "Main Interpreter greenlet (from Consumer.start) Pauses, END \n" print "Consumer.start, END" def get_job(self): return 10000 ############# def my_target_1(n): print "my_target_1, START" nums = [] while n > 0: nums.append(n) n -= 1 print "my_target_1, END" c = Consumer(my_target_1) c.start() OUTPUT ======= Consumer.start, START Main Interpreter greenlet (from Consumer.start) Pauses, START Worker.run, START Greenlet thread (from Worker.run) Pauses, START Main Interpreter greenlet (from Consumer.start) Pauses, END Main Interpreter greenlet (from Consumer.start) Pauses, START Greenlet thread (from Worker.run) Pauses, END my_target_1, START my_target_1, END Greenlet thread (from Worker.run) Pauses, START Main Interpreter greenlet (from Consumer.start) Pauses, END Main Interpreter greenlet (from Consumer.start) Pauses, START Greenlet thread (from Worker.run) Pauses, END my_target_1, START my_target_1, END Greenlet thread (from Worker.run) Pauses, START Main Interpreter greenlet (from Consumer.start) Pauses, END _______________________________________________ BangPypers mailing list BangPypers@python.org https://mail.python.org/mailman/listinfo/bangpypers