2014-05-24 5 views
1

gevents를 사용하여 웹에서 일부 이미지를 다운로드하려고합니다. 이미지 다운로드하지만 작업에 합류 할 때 다음과 같은 오류가 발생합니다. gevents : 파일을 다운로드 할 때 'TypeError : float가 필요합니다'오류 메시지가 표시됩니다.

pool.join(jobs) 
TypeError: a float is required 

이미지

다운로드 할 수 있지만 내가 올바르게 스레딩 있다고 생각하지 않는다 ... 아는 사람시겠습니까 내가 잘못 뭘하는지 ..?

pool = Pool(3) 
N = 3 

urls = ['http://commons.wikimedia.org/wiki/File:Ultraviolet_image_of_the_Cygnus_Loop_Nebula_crop.jpg', 'http://commons.wikimedia.org/wiki/File:Ultraviolet_image_of_the_Cygnus_Loop_Nebula_crop.jpg,'http://commons.wikimedia.org/wiki/File:Ultraviolet_image_of_the_Cygnus_Loop_Nebula_crop.jpg'http://commons.wikimedia.org/wiki/File:Ultraviolet_image_of_the_Cygnus_Loop_Nebula_crop.jpg'] 

finished = 0 

def download_file(url): 
    global finished 

    print('starting %s' % url) 
    try: 
     data = urllib2.urlopen(url, timeout=10000) 
    except urllib2.URLError, e: 
     print 'e : ' % e 
    else: 
     data = data.read() 
     filename = os.path.basename(url) 
     f = open(filename, 'wb') 
    f.write(data) 
    f.close() 
    finally: 
     finished += 1 

with gevent.Timeout(10000000, False): 
    for x in xrange(10, 10 + N): 
     jobs = [pool.spawn(download_file, url) for url in urls] 
     pool.join(jobs) 

print('Finished %s' % (finished, N)) 

답변

0
pool.join(jobs) 
TypeError: a float is required 

그것은 float를 필요로하고 다른 유형을 전달하고 있습니다.

정확한 유형을 보려면 jobs을 인쇄 해보십시오.

print(jobs, type(jobs)) should help you see what is happening. 

또한 URL 목록에 ' 당신의 URL 중 하나 주위가 누락되었습니다.

docs에 따르면 join은 다음과 같은 인수를 취합니다 : join(timeout=None, raise_error=False).

join 코드를 제거하면 필요한 내용을 확인하기 위해 문서를 체크 아웃해야합니다.

문자열 형식이 잘못되었으므로 형식을 지정할 두 가지 인수가 있지만 %s 만 있습니다.