深入浅析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获取操作系统信息实例
Sep 02 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
django连接oracle时setting 配置方法
Aug 29 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
Python3 assert断言实现原理解析
Mar 02 Python
python:批量统计xml中各类目标的数量案例
Mar 10 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
Python实现石头剪刀布游戏
Jan 20 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生成月历代码
2007/06/14 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP实现的购物车类实例
2015/06/17 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
[00:14]护身甲盾
2019/03/06 DOTA
深入解析Python中的集合类型操作符
2015/08/19 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
python输入多行字符串的方法总结
2019/07/02 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
计算机应届毕业生自荐信范文
2014/02/23 职场文书
西式婚礼主持词
2014/03/13 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
公司证明怎么写
2014/09/22 职场文书
热情服务标语
2014/10/07 职场文书
志愿者事迹材料
2014/12/26 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2015年药店工作总结
2015/04/20 职场文书
js之ajax文件上传
2021/05/13 Javascript
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
浅析JavaScript中的变量提升
2022/06/01 Javascript