On Sep 12, 9:08 pm, [EMAIL PROTECTED] wrote: > First off, I'm a python n00b, so feel free to comment on anything if > I'm doing it "the wrong way." I'm building a discrete event simulation > tool. I wanted to use coroutines. However, I want to know if there's > any way to hide a yield statement. > > I have a class that I'd like to look like this: > > class Pinger(Actor): > def go(self): > success = True > while success: > result = self.ping("128.111.41.38") > if result != "success": > success = False > print "Pinger done" > > But because I can't hide yield inside ping, and because I can't find a > convenient way to get a self reference to the coroutine (which is used > by the event queue to pass back results), my code looks like this: > > class Pinger(Actor): > def go(self): > # I dislike this next line > self.this_pointer = (yield None) > success = True > while success: > # I want to get rid of the yield in the next line > result = (yield self.ping("128.111.41.38")) > if result != "success": > success = False > print "Pinger done" > > I'd like to know, is there a way to get the syntax I want?
I think you're stuck with using threads in a standard Python release. Generators can't serve as coroutines when you're yielding from a nested call (they only go one level deep). You can get coroutines with Stackless Python, a non-standard version of Python. But even with Stackless I got the impression that you'd be building coroutines atop something that was fairly thread-like. There is no coroutine syntax. Carl Banks -- http://mail.python.org/mailman/listinfo/python-list