我正在尝试使用gevent加快图像下载过程。
即使整个程序运行到最底线,它也没有以返回码结束。如果删除monkey.patch_all()
行,则可以正常工作。
我在程序的第一行导入了猴子,第二行是monkey.patch_all()
。
gevent部分:
from gevent import monkey
monkey.patch_all(thread=False,socket=False)
from gevent.pool import Pool
import socket
import os,time,re
...(other library)
pool = Pool(8)
print(len(imgurllist))
print(len(titlelist))
job = [(imgurllist[i], titlelist[i]) for i in range(len(imgurllist)]
pool.map(lambda args: auto_down(*args), job)
pool.join()
print("Done")
t2=time.time()
print("The totle time: ", t2-t1)
图片代码:
def auto_down(url,filename):
socket.setdefaulttimeout(3)
try:
urllib.request.urlretrieve(url,filename)
except Exception:
count = 1
while count <=5:
try:
urllib.request.urlretrieve(url,filename)
break
except socket.timeout:
print("Reload")
count +=1
if count>5:
print("Downloading pictures failed")
运行代码时,它将一直运行到代码末尾并显示当前时间。 但是,没有打印任何行,如“以退出代码0完成处理”。似乎该进程仍在运行并停滞。
输出将如下所示。底行以只读方式打印。
Done
The totle time: 192.66301846504211
extern "Python": function gevent.libuv._corecffi.python_timer0_callback() called, but @ffi.def_extern() was not called in the current subinterpreter. Returning 0.
有什么建议吗?预先感谢。