深入浅析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 判断一个进程是否存在
Apr 09 Python
python计算N天之后日期的方法
Mar 31 Python
详解Python装饰器由浅入深
Dec 09 Python
机器学习10大经典算法详解
Dec 07 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
使用TensorFlow实现SVM
Sep 06 Python
关于tensorflow的几种参数初始化方法小结
Jan 04 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python中Yield的基本用法
Oct 18 Python
用python计算文件的MD5值
Dec 23 Python
Python OpenCV 图像平移的实现示例
Jun 04 Python
Python jiaba库的使用详解
Nov 23 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获取本机真实IP地址实例代码
2016/03/31 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
window.location.hash 属性使用说明
2010/03/20 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
学生会辞职信
2015/03/02 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
感恩教育观后感
2015/06/17 职场文书
2016年安全月活动总结
2016/04/06 职场文书