深入浅析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基础教程之python消息摘要算法使用示例
Feb 10 Python
Python的Flask框架与数据库连接的教程
Apr 20 Python
Python入门之modf()方法的使用
May 15 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
python使用opencv按一定间隔截取视频帧
Mar 06 Python
python去掉空白行的多种实现代码
Mar 19 Python
python 常用的基础函数
Jul 10 Python
Python实现截取PDF文件中的几页代码实例
Mar 11 Python
python @classmethod 的使用场合详解
Aug 23 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
python Timer 类使用介绍
Dec 28 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
jquery中.add()的使用分析
2013/04/26 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
[08:42]DOTA2每周TOP10 精彩击杀集锦vol.2
2014/06/25 DOTA
Python 命令行参数sys.argv
2008/09/06 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
一张图带我们入门Python基础教程
2017/02/05 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
python写日志文件操作类与应用示例
2019/07/01 Python
django-allauth入门学习和使用详解
2019/07/03 Python
在django中自定义字段Field详解
2019/12/03 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
Python多进程编程常用方法解析
2020/03/26 Python
css3 2D图片转动样式可以扩充到Js当中
2014/04/29 HTML / CSS
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
机电一体化专业应届本科生求职信
2013/09/27 职场文书
快递业务员岗位职责
2014/01/06 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
预备党员承诺书
2014/03/25 职场文书
安全例会汇报材料
2014/08/23 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
党建工作整改措施
2014/10/28 职场文书
房贷收入证明范本
2015/06/12 职场文书
python在package下继续嵌套一个package
2022/04/14 Python