深入浅析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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
python的else子句使用指南
Feb 27 Python
基于Python的关键字监控及告警
Jul 06 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
Python lambda函数基本用法实例分析
Mar 16 Python
python3.5基于TCP实现文件传输
Mar 20 Python
使用numba对Python运算加速的方法
Oct 15 Python
详解python做UI界面的方法
Feb 27 Python
Python基础之条件控制操作示例【if语句】
Mar 23 Python
Python+Appium实现自动化测试的使用步骤
Mar 24 Python
PyTorch中的C++扩展实现
Apr 02 Python
Keras模型转成tensorflow的.pb操作
Jul 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
php设计模式  Command(命令模式)
2011/06/17 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
php函数指定默认值方法的小例子
2013/12/04 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
php简单实现快速排序的方法
2015/04/04 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
javascript设计模式 ? 装饰模式原理与应用实例分析
2020/04/14 Javascript
JavaScript实现点击切换功能
2021/01/27 Javascript
python threading模块操作多线程介绍
2015/04/08 Python
浅谈Python单向链表的实现
2015/12/24 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
软件测试有哪些?什么是配置项?
2012/02/12 面试题
师范生实习自我鉴定
2013/11/01 职场文书
五一家具促销方案
2014/01/10 职场文书
放飞理想演讲稿
2014/09/09 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
岳庙导游词
2015/02/04 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
小孩不笨观后感
2015/06/03 职场文书
积极心理学课程心得体会
2016/01/22 职场文书