gevents:下载文件时出现'TypeError:需要浮动'错误消息

时间:2014-05-24 09:34:36

标签: python gevent

我试图使用gevents从网上下载一些图片。图像下载但我得到以下错误,当我加入工作时会产生这种错误。

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

1 个答案:

答案 0 :(得分:0)

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

它需要一个浮动而你正在传递另一种类型。

尝试打印jobs以确切了解它的类型。

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

您的网址列表中的某个网址周围还缺少'

根据docs,加入会采用以下参数join(timeout=None, raise_error=False)

如果您删除join代码,则需要查看文档以了解所需内容。

您的字符串格式也不正确,您有两个要格式化的参数但只有一个%s

您可以使用print('Finished {0} {1}'.format(finished, N))