2012-05-21 1 views
1

이 Python 코드를 실행할 때 스레드 문제가 발생했습니다. 나는 인터넷을 검색하지만 그 답을 찾지 못한다.파이썬을 사용할 때 gevent에서 스레드 예외가 발생했습니다

import urllib2 
from time import time 
import gevent 
import numpy as np 

tmp = np.loadtxt('data.txt', dtype=str) 
visit_list=tmp[:20] 

result_list =[] 

def visitUrl(u): 
    print 'start %s' %u 
    begin = time() 
    data = urllib2.urlopen(u).read() 
    print len(data) 
    print 'end-------- %s' %u 
    end = time() 
    print ('%s ::begin=%s ::end= %s::end-begin= %s' %(u, begin,end, end-begin)) 

for i in range(3): 
    reqs = [] 
    begin = time() 
    for u in visit_list: 
     start = time() 
     reqs.append(gevent.spawn(visitUrl, u)) 
     stop = time() 
     print ('%s $$$ %s' %(u, stop-start)) 
    #reqs = [gevent.spawn(visitUrl, u) for u in visit_list] 
    gevent.joinall(reqs) 
    end = time() 

    print 'ciclie %s=%s' %(i, end - begin) 
    result_list.append(end-begin) 

문제는 모든 스레드가 작업을 수행하기 전에

Exception KeyError: KeyError(4475468392,) in <module 'threading' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.pyc'> ignored 
+0

나는 코드를 실행하고 그것을 잘 작동합니다. 어떤 OS가 있습니까? 어떤 버전의 파이썬과 gevent입니까? data.txt에있는 URL은 무엇입니까? –

답변

3

this thread에 따라 메인 루프가 종료됩니다.

그냥 말 gevent.shutdown() 전화를 걸거나 제한 시간을 증가 joinall를 호출하는 동안 :

gevent.joinall(reqs, timeout=30) 
+0

대단히 감사합니다! – Djvu

+0

반갑습니다. 문제를 해결했다면,이 대답에 대한 체크 표시를 클릭하여 내 effor에 대한 약간의 보상을 고려하십시오. ;-) –