深入浅析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列表append和+的区别浅析
Feb 02 Python
python3实现域名查询和whois查询功能
Jun 21 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 Python
Python socket 套接字实现通信详解
Aug 27 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python decimal模块使用方法详解
Jun 08 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安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
2016/03/22 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
QQ空间顶部折页撕开效果示例代码
2014/06/15 Javascript
js读写json文件实例代码
2014/10/21 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
python的scipy实现插值的示例代码
2019/11/12 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
动态密码技术
2012/10/18 面试题
青春无悔演讲稿
2014/05/08 职场文书
工地宣传标语
2014/06/18 职场文书