gevents:下载文件时出现“TypeError: 需要一个浮点数”错误消息
我正在尝试使用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
pool.join(jobs)
TypeError: a float is required
你需要一个浮点数,但你传入了其他类型的东西。
试着打印一下 jobs
,看看它到底是什么类型。
print(jobs, type(jobs)) should help you see what is happening.
你在网址列表中漏掉了一个网址周围的 '
符号。
根据 文档,join 方法需要以下参数: join(timeout=None, raise_error=False)
。
如果你去掉 join
,代码就能运行,但你需要查看文档,了解你需要什么。
你的字符串格式化也不对,你有两个要格式化的参数,但只有一个 %s
。
你可以用 print('Finished {0} {1}'.format(finished, N))
来实现。