Gevent can't work
wylyeak opened this issue · comments
class GeventPrintActor(GeventActor):
def print_text(self, message):
print message
self.stop()
class ThreadingPrintActor(pykka.ThreadingActor):
def print_text(self, message):
print message
self.stop()
GeventPrintActor.start().proxy().print_text("GeventPrintActor")
ThreadingPrintActor.start().proxy().print_text("ThreadingPrintActor")
Can't see GeventPrintActor in console
I'm a bit rusty on gevent, but I'm guessing that the print
statement does some I/O that is lost unless you use gevent's monkey patching to gevent-enable print.
The following example works:
import gevent.monkey
gevent.monkey.patch_all()
import pykka
import pykka.gevent
class GeventPrintActor(pykka.gevent.GeventActor):
def print_text(self, message):
print message
self.stop()
class ThreadingPrintActor(pykka.ThreadingActor):
def print_text(self, message):
print message
self.stop()
GeventPrintActor.start().proxy().print_text('GeventPrintActor')
ThreadingPrintActor.start().proxy().print_text('ThreadingPrintActor')
If you don't do any I/O, GeventActor
works without monkey patching anything:
import pykka
import pykka.gevent
class GeventPrintActor(pykka.gevent.GeventActor):
def get_text(self):
return 'GeventText'
class ThreadingPrintActor(pykka.ThreadingActor):
def get_text(self):
return 'ThreadingText'
gevent_proxy = GeventPrintActor.start().proxy()
threading_proxy = ThreadingPrintActor.start().proxy()
gevent_future = gevent_proxy.get_text()
threading_future = threading_proxy.get_text()
print gevent_future.get()
print threading_future.get()
gevent_proxy.stop()
threading_proxy.stop()