深入浅析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定时杀进程的相关知识,希望能够帮助到大家!

相关文章

  • python使用turtle库绘制时钟

    python使用turtle库绘制时钟

    这篇文章主要为大家详细介绍了python使用turtle库绘制时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 使用Python的package机制如何简化utils包设计详解

    使用Python的package机制如何简化utils包设计详解

    这篇文章主要给大家介绍了关于使用Python的package机制如何简化utils包设计的相关资料,文中通过示例代码的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-12-12
  • 浅谈python数据类型及其操作

    浅谈python数据类型及其操作

    今天带大家了解python数据类型的相关知识,文中介绍的非常详细,对正在学习python的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • Python中subprocess模块的用法详解

    Python中subprocess模块的用法详解

    这篇文章主要介绍了Python中subprocess模块的用法详解,subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/output/error 管道,并获取它们的返回状态码,这个模块的目的在于替换几个旧的模块和方法,需要的朋友可以参考下
    2023-08-08
  • Python 编程操作连载之字符串,列表,字典和集合处理

    Python 编程操作连载之字符串,列表,字典和集合处理

    这篇文章主要介绍了Python 编程操作连载之字符串,列表,字典和集合处理,文章围绕主题相关资料展开详细的内容介绍,需要的朋友可参考一下下面文章内容
    2022-06-06
  • python在命令行下使用google翻译(带语音)

    python在命令行下使用google翻译(带语音)

    这篇文章主要介绍了使用google翻译服务获得翻译和语音的示例,大家参考使用吧
    2014-01-01
  • 关于Python中模块的简介、定义与使用

    关于Python中模块的简介、定义与使用

    这篇文章主要介绍了关于Python中模块的简介、定义与使用,模块是Python的重要组成部分,需要的朋友可以参考下
    2023-04-04
  • opencv读取视频并保存图像的方法

    opencv读取视频并保存图像的方法

    实习项目要做安全帽目标检测,拿到了公司给的一些视频数据,使用Opencv读取视频并每隔1s存储一副图像,本文就详细的介绍一下使用,感兴趣的可以了解一下
    2021-06-06
  • 利用Matplotlib绘制折线图、散点图、柱状图、直方图、饼图的实例

    利用Matplotlib绘制折线图、散点图、柱状图、直方图、饼图的实例

    这篇文章主要介绍了利用Matplotlib绘制折线图、散点图、柱状图、直方图、饼图的实例代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 解决python 打包成exe太大的问题

    解决python 打包成exe太大的问题

    这篇文章主要介绍了解决python 打包成exe太大的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03

最新评论