• 技术文章 >后端开发 >Python教程

    浅析python定时杀进程

    高洛峰高洛峰2017-03-03 15:07:05原创894
    之前写了个python脚本用selenium+phantomjs爬新帖子,在循环拉取页面的过程中,phantomjs总是block住,使用WebDriverWait设置最长等待时间无效。用firefox替换phantomjs无改善

    因为这个脚本不会长期使用,因此采取临时办法,新开一个子线程固定周期杀死phantomjs进程,这样selenium就会在block最多不超过此周期后返回。当然在爬虫脚本中做一些微调防止部分url被跳过

    定时执行任务采用sched模块,很多人将其与crontab相提并论

    杀死特定进程的命令


    复制代码 代码如下:


    kill -9 pid命令可以无条件终止对应pid进程

    获取名为phantomjs的进程pid

    ps命令列出进程信息

    grep过滤得指定名字的进程信息

    awk '{print $2}'提取第二列pid信息

    最终命令为:kill -9 `ps -aux|grep phantomjs|awk '{print $2}'`

    python可以用os.system()执行shell命令

    使用sched模块周期执行任务

    sched模块使用heapq保存event队列,其event为namedtuple类型

    sched需要提供两个函数,一个用来获取时间变化,一个用于等待一段时间,可自定义

    基本API

    sched.scheduler(time_func, sleep_func) 函数返回一个scheduler对象,timefunc是一个返回数字的计时函数,而sleepfunc可接受此数字参数,并延时相应时间

    scheduler.enter(delay, priority, action, argument)在delay时间段后,用参数argument调用action, argument必须是一个tuple。若要在固定时刻运行,则应调用scheduler.enterabs

    scheduler.cancel(event)取消定时任务。event为enter函数返回值

    scheduler.run()开始执行

    任务时间重叠

    在执行任务时有可能要block一段时间,任务返回后可能已经超过下一个任务的定时时刻,这种情况下会立刻执行下一个任务,而不会跳过

    周期执行

    类似于递归调用,写一个wrapper function,在任务里面再次定时下一次任务即可

    def wrapper(func, delay):
    scheduler.enter(delay, 0, wrapper, (func, delay))
    func()

    最终代码

    import os, time, sched
    schedule = sched.scheduler(time.time, time.sleep)
    cmd = '''kill -9 `ps -aux|grep phantomjs|awk '{print $2}'`
    '''
    def recycle_eval(c, inc):
    schedule.enter(inc, 0, recycle_eval, (c, inc))
    os.system(c)
    print time.ctime(),'phantomjs killed'
    if __name__ == '__main__':
    inc = 180
    schedule.enter(inc, 0, recycle_eval, (cmd, inc))
    schedule.run()

    以上所述是小编给大家介绍的python定时杀进程的相关知识,希望能够帮助到大家!

    更多浅析python定时杀进程相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python 杀进程
    上一篇:Python第三方库的安装方法 下一篇:python函数递归和生成器
    php培训_php实战培训【立即报名】-php中文网第20期

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• Python实例详解pdfplumber读取PDF写入Excel• 归纳总结Python中的装饰器知识点• python中API调用的详解与示例• 手把手教你在Python使用plot()函数画图• 详细解析python正则表达式re模块
    1/1

    PHP中文网