深入浅析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 pass 语句使用示例
Mar 11 Python
python中list常用操作实例详解
Jun 03 Python
使用Python的turtle模块画图的方法
Nov 15 Python
python中字符串内置函数的用法总结
Sep 13 Python
YUV转为jpg图像的实现
Dec 09 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
python+requests接口压力测试500次,查看响应时间的实例
Apr 30 Python
python 等差数列末项计算方式
May 03 Python
基于python实现ROC曲线绘制广场解析
Jun 28 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
python 远程执行命令的详细代码
Feb 15 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
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
Smarty保留变量用法分析
2016/05/23 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
Laravel 框架控制器 Controller原理与用法实例分析
2020/04/14 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
python轻松实现代码编码格式转换
2015/03/26 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
天游软件面试
2013/11/23 面试题
会计电算化专业应届大学生求职信
2013/10/22 职场文书
合同协议书格式
2014/04/18 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
Python进行区间取值案例讲解
2021/08/02 Python