深入浅析python定时杀进程

 更新时间:2016年06月06日 16:39:17   作者:Focustc  
这篇文章主要介绍了深入浅析python定时杀进程的相关资料,需要的朋友可以参考下

之前写了个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定时杀进程的相关知识,希望能够帮助到大家!

相关文章

  • PyTorch搭建CNN实现风速预测

    PyTorch搭建CNN实现风速预测

    PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它不仅能够实现强大的GPU加速,同时还支持动态神经网络。本文将介绍PyTorch搭建CNN如何实现风速预测,感兴趣的可以学习一下
    2021-12-12
  • Pycharm常用快捷键总结及配置方法

    Pycharm常用快捷键总结及配置方法

    这篇文章主要介绍了Pycharm常用快捷键总结及配置方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 详解在Anaconda环境下Python安装pydot与graphviz的方法

    详解在Anaconda环境下Python安装pydot与graphviz的方法

    这篇文章主要为大家详细介绍了在Anaconda环境中,安装Python语言pydot与graphviz两个模块的方法,文中的安装方法讲解详细,感兴趣 的可以了解一下
    2023-02-02
  • Python编程中对文件和存储器的读写示例

    Python编程中对文件和存储器的读写示例

    这篇文章主要介绍了Python编程中对文件和存储器的读写示例,包括使用cPickle储存器存储对象的例子,需要的朋友可以参考下
    2016-01-01
  • Python3 元组tuple入门基础

    Python3 元组tuple入门基础

    这篇文章主要介绍了Python3 元组tuple入门基础,需要的朋友可以参考下
    2020-02-02
  • Python通过递归函数输出嵌套列表元素

    Python通过递归函数输出嵌套列表元素

    这篇文章主要介绍了Python通过递归函数输出嵌套列表元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python爬虫基础教程:requests库(二)代码实例

    python爬虫基础教程:requests库(二)代码实例

    这篇文章主要介绍了python爬虫基础教程:requests库(二),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • python 模拟贷款卡号生成规则过程解析

    python 模拟贷款卡号生成规则过程解析

    这篇文章主要介绍了python 模拟贷款卡号生成规则过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 详解Django admin高级用法

    详解Django admin高级用法

    这篇文章主要介绍了Django admin高级用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 关于python的第三方库下载与更改方式

    关于python的第三方库下载与更改方式

    这篇文章主要介绍了关于python的第三方库下载与更改方式,使用python的朋友都知道python有很多非常方便的第三方库可以使用,那么如果下载这些第三方库呢,今天小编就带你们来看看
    2023-04-04

最新评论