深入浅析python定时杀进程


Posted in Python onJune 06, 2016

之前写了个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 相关文章推荐
python简单的函数定义和用法实例
May 07 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
python实现图片批量压缩程序
Jul 23 Python
用Django写天气预报查询网站
Oct 21 Python
python numpy元素的区间查找方法
Nov 14 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
深入理解python函数递归和生成器
Jun 06 #Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 #Python
浅析AST抽象语法树及Python代码实现
Jun 06 #Python
使用Python的Flask框架构建大型Web应用程序的结构示例
Jun 04 #Python
在Python的Flask框架中构建Web表单的教程
Jun 04 #Python
Python中规范定义命名空间的一些建议
Jun 04 #Python
全面理解Python中self的用法
Jun 04 #Python
You might like
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
PHP4在Windows2000下的安装
2006/10/09 PHP
adodb与adodb_lite之比较
2006/12/31 PHP
PHP 冒泡排序算法的实现代码
2010/08/08 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
js模块加载方式浅析
2017/08/12 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python实现去除代码前行号的方法
2015/03/10 Python
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
python获取整个网页源码的方法
2020/08/03 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
工作态度检讨书
2014/02/11 职场文书
爱心倡议书范文
2014/05/12 职场文书
高中团支书竞选稿
2015/11/21 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
你知道哪几种MYSQL的连接查询
2021/06/03 MySQL
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
Golang ort 中的sortInts 方法
2022/04/24 Golang