深入浅析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运用于数据分析的简单教程
Mar 27 Python
python编码最佳实践之总结
Feb 14 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
Python爬取网易云音乐热门评论
Mar 31 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
对Python中数组的几种使用方法总结
Jun 28 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
在Python中调用Ping命令,批量IP的方法
Jan 26 Python
Keras实现将两个模型连接到一起
May 23 Python
pycharm中选中一个单词替换所有重复单词的实现方法
Nov 17 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 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
php使用GeoIP库实例
2014/06/27 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
php单一接口的实现方法
2015/06/20 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
EXTjs4.0的store的findRecord的BUG演示代码
2013/06/08 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
AngularJS 中ui-view传参的实例详解
2017/08/25 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
js控制随机数生成概率代码实例
2019/03/21 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
python实现识别相似图片小结
2016/02/22 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
中医专业应届生求职信
2013/11/17 职场文书
大学生学习2014全国两会心得体会
2014/03/13 职场文书
求职自我推荐信
2014/06/25 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记
MySQL三种方式实现递归查询
2022/04/18 MySQL
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技