深入浅析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 Web框架Flask下网站开发入门实例
Feb 08 Python
Python 3.x 新特性及10大变化
Jun 12 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
Nov 21 Python
利用Python如何批量修改数据库执行Sql文件
Jul 29 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
如何基于python生成list的所有的子集
Nov 11 Python
jupyter notebook 重装教程
Apr 16 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 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 Mysql类 可以参考学习熟悉下
2009/06/21 PHP
php 常用类整理
2009/12/23 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
PDO::errorCode讲解
2019/01/28 PHP
<script defer> defer 是什么意思
2009/05/10 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
Vue.js每天必学之计算属性computed与$watch
2016/09/05 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
启动targetcli时遇到错误解决办法
2017/10/26 Python
python中的print()输出
2019/04/12 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python如何生成xml文件
2020/06/04 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
一些Solaris面试题
2015/12/22 面试题
新媒传信软件测试面试题
2013/02/24 面试题
应届护士求职信范文
2014/01/26 职场文书
英语简历自我评价
2014/01/26 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
西游记读书笔记
2015/06/25 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
table不让td文字溢出操作方法
2022/12/24 HTML / CSS