深入浅析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实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
用Python设计一个经典小游戏
May 15 Python
Python实现好友全头像的拼接实例(推荐)
Jun 24 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
Jun 27 Python
对python文件读写的缓冲行为详解
Feb 13 Python
详解python中递归函数
Apr 16 Python
django 2.2和mysql使用的常见问题
Jul 18 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
Pyinstaller 打包exe教程及问题解决
Aug 16 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
python用分数表示矩阵的方法实例
Jan 11 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 Memcached应用实现代码
2010/02/08 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
php文件操作实例代码
2012/05/10 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
node.js超时timeout详解
2014/11/26 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
浅析vue cli3 封装Svgicon组件正确姿势(推荐)
2020/04/27 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
在Python中操作字典之update()方法的使用
2015/05/22 Python
详解Python迭代和迭代器
2016/03/28 Python
python爬取51job中hr的邮箱
2016/05/14 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
信访工作者先进事迹
2014/01/17 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
仓库主管岗位职责
2014/03/02 职场文书
网络管理专业求职信
2014/03/15 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
某某同志考察材料
2014/05/28 职场文书
运动会广播稿50字
2015/08/19 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
python如何为list实现find方法
2022/05/30 Python