我试图使用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))
答案 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))