zoukankan      html  css  js  c++  java
  • 让大蛇(Python)帮你找工作

    前段时间用Python实现了一个网络爬虫(让大蛇(Python)帮你找工作 ),效率总体还可以,但是缺点就是每次都需要手动的去触发,于是打算对该爬虫加上Timer,经过网上一番搜索以及API的查询,发现Python自身的API在这方面没有很好支持.

    在这种情况下要使用Timer功能,除了第三方的模块外,可以通过使用标准库为我们提供的sched模块和Timer类。这两个类也只能算是用来现实Timer的工具类,而不能算是真正的Timer.下面对这两种类如何实现Timer做个简单的演示

    (1)sched

    准确的说,它是一个调度(延时处理机制),每次想要定时执行某任务都必须写入一个调度。

    '''
    使用sched模块实现的timer,sched模块不是循环的,一次调度被执行后就Over了,如果想再执行,可以使用while循环的方式不停的调用该方法
    Created on 2013-7-31
    
    @author: Eric
    '''
    import time, sched
    
    #被调度触发的函数
    def event_func(msg):
        print("Current Time:", time.strftime("%y-%m-%d %H:%M:%S"), 'msg:', msg)
    
    def run_function():
        #初始化sched模块的scheduler类
        s = sched.scheduler(time.time, time.sleep)
        #设置一个调度,因为time.sleep()的时间是一秒,所以timer的间隔时间就是sleep的时间,加上enter的第一个参数
        s.enter(0, 2, event_func, ("Timer event.",))
        s.run()
    
    def timer1():
        while True:
            #sched模块不是循环的,一次调度被执行后就Over了,如果想再执行,可以使用while循环的方式不停的调用该方法
            time.sleep(1)
            run_function()
    
    if __name__ == "__main__":
        timer1()
    


    (2)Timer

    Timer类也是一次性触发的,思路和sched大概差不多

    '''
    Created on 2013-7-31
    
    @author: Eric
    '''
    import time
    import threading
    
    def timer_start():
        t = threading.Timer(1, test_func, ("Parameter1",))
        t.start()
    
    def test_func(msg1):
        print("I'm test_func,", msg1)
        timer_start()
    
    def timer2():
        timer_start()
        while True:
            time.sleep(1)
    
    if __name__ == "__main__":
        timer2()
    


    虽然说上面的两种现实看起来都很蠢,但是如果不借助第三方的库,可能也只能这样了.


  • 相关阅读:
    2020/3/12
    练习题1
    2020/3/26
    2020/3/25
    2020/3/24
    2020/3/23
    应用层
    bzoj3326[SCOI2013]数数
    HEOI2017游记
    bzoj4417[SHOI2013]超级跳马
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3231131.html
Copyright © 2011-2022 走看看