深入浅析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获取代理IP的实例分享
May 07 Python
Python装饰器简单用法实例小结
Dec 03 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
python调用API接口实现登陆短信验证
May 10 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
class类在python中获取金融数据的实例方法
Dec 10 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实现httpclient类示例
2014/04/08 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
php实现webservice实例
2014/11/06 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
基于vue.js实现图片轮播效果
2016/12/01 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
Python实现简单的用户交互方法详解
2018/09/25 Python
django 信号调度机制详解
2019/07/19 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
python中操作文件的模块的方法总结
2021/02/04 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
小班秋游活动方案
2014/02/22 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
文明演讲稿范文
2014/05/12 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
客房领班岗位职责
2015/02/11 职场文书
十七岁的单车观后感
2015/06/12 职场文书
《赵州桥》教学反思
2016/02/17 职场文书