猴子补丁???

背景

前两天写爬虫,爬国外的网站难免超时,就会带下如下恶果:

  1. 代码运行几个小时
  2. 我的睡眠时间延后几个小时
  3. 让我生物钟失常
  4. 性格暴躁
  5. 代码出错率更高
  6. Debug时间增长
  7. 睡眠时间延后好几个小时
    ......

显然易见的,解决超时问题就能解决很多事情。

但是涉及到代码计时和代码中断,一定是多线程了。可我没有学过Python的多线程,也不想学。一通查找,发现Python的eventlet库可以帮助我们不写多线程代码就可以实现这个功能。

初识Eventlet库

这个库主要用于处理多线程(协程、异步)问题,常用于网络应用上,性能传说很强。解决我的问题用这个库,有点杀鸡用牛刀,但就是方便

希望有生之年我能正经用一次它吧

先安装这个库:

pip install eventlet

然后引入

import eventlet

关于线程

这个库提供了一个函数,可以把当前内核中的所有线程都接入线程控制器中 -- eventlet.monkey_patch(),这个东西也就是猴子补丁

  • 优点:简单,只需要在被操作的代码前插入这行即可
  • 缺点:

    • 并发数不高时会减慢代码速度
    • 引入不必要的多线程相关问题

时间控制

eventlet提供了一个函数来计算运行时间eventlet.Timeout(),超时自动终止绑定的线程。

使用

time_out控制线程的运行时间,如果超时则直接kill该线程但不终止程序,

将你需要卡时的代码放入code A即可运行。

import eventlet

''' Some Code 
'''

time_out = 180
eventlet.monkey_patch()
with eventlet.Timeout(time_out,False):
    '''code A
    '''
Last modification:February 14th, 2020 at 02:08 pm
Compared with money, your comment could inspire me more.
相较于钱财,你的留言更能激发我创作的灵感