深入浅析python定时杀进程
之前写了个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的Supervisor进行进程监控以及自动启动
做服务器端开发的同学应该都对进程监控不会陌生,最近恰好要更换 uwsgi 为 gunicorn,而gunicorn又恰好有这么一章讲进程监控,所以多研究了下. 结合之前在腾讯工作的经验,也会讲讲腾讯的服务器监控是怎么做的.同时也会讲下小团队又该怎么敏捷的解决. 下面按照监控的方法依次介绍. 一.按照进程名监控 在腾讯内部所有server都是要打包发布的,而在打包过程中是需要填写要监控的进程名,然后在crontab中定时通过ps查询进程是否存在. 这种方法是比较简单的方法,但是考虑到很多进程会在启
-
python关闭windows进程的方法
本文实例讲述了python关闭windows进程的方法.分享给大家供大家参考.具体如下: 下面的python代码根据进程的名字调用windows的taskkill命令关闭指定的进程 import os command = 'taskkill /F /IM QQ.exe' #比如这里关闭QQ进程 os.system(command) 希望本文所述对大家的Python程序设计有所帮助.
-
使用python 获取进程pid号的方法
保存为.py文件后 运行脚本在后面添加进程名称即可 比如:python proinfo.py qq 即可获取QQ的进程信息,注意不区分大小写 复制代码 代码如下: #-*- encoding:UTF-8 -*-import osimport sysimport string import psutilimport re def get_pid(name): process_list = psutil.get_process_list() regex = "pid=(\d+),\sname=\'&
-
python开启多个子进程并行运行的方法
本文实例讲述了python开启多个子进程并行运行的方法.分享给大家供大家参考.具体如下: 这个python代码创建了多个process子进程,创建完成后先start(),最后统一join,这样所有子进程会并行执行. from multiprocessing import Process import sys, os import time def timetask(times): time.sleep(times) print time.localtime() def works(func, a
-
浅析Python中的多进程与多线程的使用
在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为"GIL")指指点点,说它阻碍了Python的多线程程序同时运行.因此,如果你是从其他语言(比如C++或Java)转过来的话,Python线程模块并不会像你想象的那样去运行.必须要说明的是,我们还是可以用Python写出能并发或并行的代码,并且能带来性能的显著提升,只要你能顾及到一些事情.如果你还没看过的话,我建议你看看Eqbal Quran的文章
-
Python语言实现获取主机名根据端口杀死进程
推荐阅读:使用python检测主机存活端口及检查存活主机 下面给大家分享使用python语言实现获取主机名根据端口杀死进程代码. ip=os.popen("ifconfig eth0|grep 'inet addr'|awk -F ':' '{print $2}'|awk '{print $1}'") ip=ip..read().strip() pid=os.popen("netstat -anp|grep 8998 |awk '{print $7}'").read
-
python 判断一个进程是否存在
源代码如下: 复制代码 代码如下: #-*- coding:utf-8 -*- def check_exsit(process_name): import win32com.client WMI = win32com.client.GetObject('winmgmts:') processCodeCov = WMI.ExecQuery('select * from Win32_Process where Name="%s"' % process_name) if len(proces
-
linux系统使用python监控apache服务器进程脚本分享
crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bin/env Python import os, sys, time while True: time.sleep(4) try: ret = os.popen('ps -C apache -o pid,cmd').readlines() if len(ret) < 2: print "apache 进程异常退出, 4 秒后重新启动" time.sleep(3) os.system
-
探究Python多进程编程下线程之间变量的共享问题
1.问题: 群中有同学贴了如下一段代码,问为何 list 最后打印的是空值? from multiprocessing import Process, Manager import os manager = Manager() vip_list = [] #vip_list = manager.list() def testFunc(cc): vip_list.append(cc) print 'process id:', os.getpid() if __name__ == '__main_
-
深入浅析python定时杀进程
之前写了个python脚本用selenium+phantomjs爬新帖子,在循环拉取页面的过程中,phantomjs总是block住,使用WebDriverWait设置最长等待时间无效.用firefox替换phantomjs无改善 因为这个脚本不会长期使用,因此采取临时办法,新开一个子线程固定周期杀死phantomjs进程,这样selenium就会在block最多不超过此周期后返回.当然在爬虫脚本中做一些微调防止部分url被跳过 定时执行任务采用sched模块,很多人将其与crontab相提并论
-
浅析python 定时拆分备份 nginx 日志的方法
一.背景: nginx 的log 不会自动按天备份,而且记录时间格式不统一,此程序专门解决这两个问题: 二.windows 部署方式 1.在 nginx 目录,创建一个 nginx_logs_backup.bat 文件:文件内容如下 python nginx_logs_splter.py --nginxConf=nginx.conf --nginxDir=xxxxx --logPrefixs=access,error 2.在定时任务中加一个定时任务,调用这个 bat 文件: 2.1 开始-程序-
-
python定时检查某个进程是否已经关闭的方法
本文实例讲述了python定时检查某个进程是否已经关闭的方法.分享给大家供大家参考.具体如下: import threading import time import os import subprocess def get_process_count(imagename): p = os.popen('tasklist /FI "IMAGENAME eq %s"' % imagename) return p.read().count(imagename) def timer_star
-
python定时检测无响应进程并重启的实例代码
总有一些程序在windows平台表现不稳定,动不动一段时间就无响应,但又不得不用,每次都是发现问题了手动重启,现在写个脚本定时检测进程是否正常,自动重启. 涉及知识点 schedule定时任务调度 os.popen运行程序并读取解析运行结果 代码分解 脚本主入口 if __name__ == '__main__': #每5秒执行检查任务 schedule.every(5).seconds.do(check_job) #此处固定写法,意思是每秒钟schedule看下是否有pending的任务,有就
-
查看端口并杀进程python脚本代码
我就废话不多说,直接上代码吧: # -*- coding: utf-8 -*- import os out=os.system('netstat -aon|findstr "25"')#25端口号 print(out)#输出进程 out=os.system('tasklist|findstr "3316"')#3316进是程 print(out)#输出程序名字 out=os.system('taskkill /f /t /im MESMTPC.exe')#MESMT
-
深入浅析python中的多进程、多线程、协程
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结构--进程控制块. 进程就是一个程序在一个数据集上的一次动态执行过程. 进程一般由程序.数据集.进程控
-
浅析python协程相关概念
这篇文章是读者朋友的python协程的学习经验之谈,以下是全部内容: 协程的历史说来话长,要从生成器开始讲起. 如果你看过我之前的文章python奇遇记:迭代器和生成器 ,对生成器的概念应该很了解.生成器节省内存,用的时候才生成结果. # 生成器表达式 a = (x*x for x in range(10)) # next生成值 next(a()) # 输出0 next(a()) # 输出1 next(a()) # 输出4 与生成器产出数据不同的是,协程在产出数据的同时还可以接收数据,具体来说就
-
详解Python 定时框架 Apscheduler原理及安装过程
在我们的日常工作自动化测试当中,几乎超过一半的功能都需要利用定时的任务来推动触发,例如在我们项目中有一个定时监控模块,根据自己设置的频率定时跑测试用例,定时检测是否存在线上紧急任务等等,这些都涉及到了有关定时任务的问题,很多情况下,大多数人会选择window的任务计划程序,但如果程序不在window平台下运行,就不能定时启动了:当然也可利用time模块的time.sleep()方法使程序休眠来达到定时任务的目的,但定时任务多了,代码可能看起来不太那么友好且有很大的局限性,因此,此时的 Apsch
-
Python基础之进程详解
一.前言 进程,一个新鲜的字眼,可能有些人并不了解,它是系统某个运行程序的载体,这个程序可以有单个或者多个进程,一般来说,进程是通过系统CPU 内核数来分配并设置的,我们可以来看下系统中的进程: 可以看到,360浏览器是真的皮,这么多进程啊,当然可以这样来十分清楚的看进程线程使用情况: 通过任务管理器中的资源监视器,是不是很厉害了,哈哈哈.讲完了这些,再说说用法. 二.基本用法 进程能干什么,这是我们要深思熟虑的事情.我们都知道一个程序运行会创建进程,所以程序在创建这些进程的时候,为了让它们更能
-
浅析Python实现DFA算法
一.概述 计算机操作系统中的进程状态与切换可以作为 DFA 算法的一种近似理解.如下图所示,其中椭圆表示状态,状态之间的连线表示事件,进程的状态以及事件都是可确定的,且都可以穷举. DFA 算法具有多种应用,在此先介绍在匹配关键词领域的应用. 二.匹配关键词 我们可以将每个文本片段作为状态,例如"匹配关键词"可拆分为"匹"."匹配"."匹配关"."匹配关键"和"匹配关键词"五个文本片段.
随机推荐
- ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
- Git 命令行教程及实例教程(附github注册)
- jQuery mobile 移动web(6)
- AngularJs导出数据到Excel的示例代码
- 解析Java线程同步锁的选择方法
- SpringCloud实战小贴士之Zuul的路径匹配
- Asp.Net 动态页面转静态页面主要代码
- php的一个简单加密解密代码
- java eclipse 启动参数
- android使用handlerthread创建线程示例
- Nodejs读取文件时相对路径的正确写法(使用fs模块)
- 同一个文件在windows和linux下计算md5哈希不一致的原因及解决方法
- oracle 声明游标(不具备字段)规则应用
- JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
- 用Java设计模式中的观察者模式开发微信公众号的例子
- Android编程之内存溢出解决方案(OOM)实例总结
- 关关小说采集器[杰奇]采集出错的修正方法
- Kloxo-MR VPS主机控制面板-安装使用及中文设置方法
- Servlet实现点击计数器的方法
- 解决调试JDK源码时,不能查看变量的值问题