Python: Getting value from Gevent Greenlet
10,834
According to http://www.gevent.org/intro.html you want
def asynchronous():
threads = [Greenlet.spawn(fetch, i) for i in range(10)]
gevent.joinall(threads)
print([thread.value for thread in threads])
Author by
tldr
Updated on June 24, 2022Comments
-
tldr about 2 years
I'm learning Gevent, but can't get the value returned by the function called in a greenlet. The following code:
import gevent.monkey gevent.monkey.patch_socket() import gevent from gevent import Greenlet import urllib2 import simplejson as json def fetch(pid): response = urllib2.urlopen('http://time.jsontest.com') result = response.read() json_result = json.loads(result) datetime = json_result['time'] print('Process %s: %s' % (pid, datetime)) return json_result['time'] def synchronous(): for i in range(1,10): fetch(i) def asynchronous(): threads = [Greenlet.spawn(fetch, i) for i in range(10)] result = gevent.joinall(threads) print [Greenlet.value(thread) for thread in threads] print('Synchronous:') synchronous() print('Asynchronous:') asynchronous()
gives me the error:
print [Greenlet.value(thread) for thread in threads] AttributeError: type object 'Greenlet' has no attribute 'value'
What am I doing wrong, and how do I get the value from each greenlet?
-
tldr over 10 yearsthanks Peter! Could you help me with my other Gevent question: stackoverflow.com/questions/20580252/…
-
Babu over 8 years
result = gevent.joinall(threads)
assigning to a name is not necessary though. -
Peter Gibson over 8 years@Babu, yes looks like if you're not using the
timeout
keyword argument tojoinall
then you can ignore the result.