Я пытаюсь использовать 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.
Есть предложения, пожалуйста?Заранее спасибо.