深入浅析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实现排序算法
Feb 14 Python
使用python开发vim插件及心得分享
Nov 04 Python
python字典get()方法用法分析
Apr 17 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
Sep 19 Python
python使用代理ip访问网站的实例
May 07 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
Dec 13 Python
500行python代码实现飞机大战
Apr 24 Python
python怎么判断素数
Jul 01 Python
python中数字是否为可变类型
Jul 08 Python
Python正则re模块使用步骤及原理解析
Aug 18 Python
Python如何实现机器人聊天
Sep 10 Python
Python urllib库如何添加headers过程解析
Oct 05 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
javascript定时变换图片实例代码
2013/03/17 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
Puppet的一些技巧
2018/09/17 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
Python基于pillow判断图片完整性的方法
2016/09/18 Python
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
django的登录注册系统的示例代码
2018/05/14 Python
Django的models中on_delete参数详解
2019/07/16 Python
python操作excel让工作自动化
2019/08/09 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
Trench London官方网站:高级风衣和意大利皮夹克
2020/07/11 全球购物
教师廉洁自律承诺书
2014/05/26 职场文书
罚站检讨书
2015/01/29 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python