深入浅析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的列表中利用remove()方法删除元素的教程
May 21 Python
在MAC上搭建python数据分析开发环境
Jan 26 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
Win10下python3.5和python2.7环境变量配置教程
Sep 18 Python
pycharm: 恢复(reset) 误删文件的方法
Oct 22 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
Python实现一个论文下载器的过程
Jan 18 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
python异常中else的实例用法
Jun 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
discuz7 phpMysql操作类
2009/06/21 PHP
php调用c接口无错版介绍
2014/03/11 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
屏蔽IE弹出"您查看的网页正在试图关闭窗口,是否关闭此窗口"的方法
2013/12/31 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
2017/09/19 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
virtualenv实现多个版本Python共存
2017/08/21 Python
解决python "No module named pip" 的问题
2018/10/13 Python
python如何实现从视频中提取每秒图片
2020/10/22 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
Python时间差中seconds和total_seconds的区别详解
2019/12/26 Python
Python 远程开关机的方法
2020/11/18 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
Python Pandas list列表数据列拆分成多行的方法实现
2020/12/14 Python
印尼购物网站:iLOTTE
2019/10/16 全球购物
Java多态性的定义以及类型
2014/09/16 面试题
大学学年自我鉴定
2013/10/28 职场文书
电气工程师岗位职责
2014/01/01 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
日语专业求职信
2014/07/04 职场文书
可可西里观后感
2015/06/08 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
详解pytorch创建tensor函数
2022/03/22 Python
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers