编写monkey.patch_all()时,即使最后一行代码已经运行,程序也不会返回退出代码

时间:2018-10-26 13:03:22

标签: python gevent

我正在尝试使用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.

有什么建议吗?预先感谢。

0 个答案:

没有答案