2013-12-14 2 views
3

저는 Gevent를 배우고 있지만 greenlet에서 호출 한 함수가 반환 한 값을 가져올 수 없습니다. 다음 코드 :Python : Gevent Greenlet에서 가치 얻기

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() 

나에게 오류 제공 :

print [Greenlet.value(thread) for thread in threads] 
AttributeError: type object 'Greenlet' has no attribute 'value' 

내가 잘못하고있는 중이 야 무엇을하고 어떻게 각 greenlet에서 값을받을 수 있나요?

답변

7

http://www.gevent.org/intro.html에 따르면 당신은

def asynchronous(): 
    threads = [Greenlet.spawn(fetch, i) for i in range(10)] 
    result = gevent.joinall(threads) 
    print [thread.value for thread in threads] 
+0

덕분에 피터를 원한다! 내 다른 Gevent 질문을 도와 줄 수 있습니까? http://stackoverflow.com/questions/20580252/python-requests-module-throws-exception-with-gevent – tldr

+0

'result = gevent.joinall (threads)'이름에 할당 그래도 필요하지 않습니다. – Babu

+0

@Babu, 네가'joinall'에'timeout' 키워드 인자를 사용하지 않는다면 그 결과를 무시할 수 있습니다. –