python定时杀进程

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()

作者Focustc,来自于CSDN

时间: 2024-10-12 09:08:20

python定时杀进程的相关文章

Python编写守护进程程序

Python编写守护进程程序思路 1. fork子进程,父进程退出通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端和shell都是进程,shell进程是终端进程的子进程,通过ps命令可以很容易的查看到.在这个shell环境下一开始执行的程序都是shell进程的子进程,自然会受到shell进程的影响.在程序里fork子进程后,父进程退出,对了shell进程来说,这个父进程就算执行完了,而产生的子进程会被init进程接管,从而也就脱离了终端的控制. 2-4

理解杀进程的实现原理(转)

基于Android 6.0的源码剖析, 分析kill进程的实现原理,以及讲讲系统调用(syscall)过程,涉及源码: /framework/base/core/java/android/os/Process.java /framework/base/core/jni/android_util_Process.cpp /system/core/libprocessgroup/processgroup.cpp /frameworks/base/core/jni/com_android_intern

Python定时返回网址状态码&&网页内容是否为json数据

#!/usr/bin/env python#-*- coding:utf:8 -*- import requests,sys,os,time # 判断传值数知否匹配if len(sys.argv) == 3:passelse:    print 'Usage: %s <monitoring_name> <interval_time>'%(sys.argv[0])    sys.exit(2) url = 'url地址' # 覆盖存放检测值文件def successful_state

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

python中的进程、线程(threading、multiprocessing、Queue、subprocess)

Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等. 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专

window根据端口杀进程

先根据端口查到进程pid netstat –ano|findstr “指定端口号” 之后使用taskkill命令杀死进程 taskkill /pid pid 有时候会报一个不让杀进程的情况,这种情况如果需要强制杀进程需要加上/f参数 taskkill /f /fi "pid eq 11111" 之后就可以了

linux下输出查看进程及杀进程

1.查找有关tomcat的进程 ps -ef | grep tomcat 2.查看某端口占用情况 netstat -tulpn | grep 9009 3.杀进程 普通:kill 进程id 强制:kill kill -s 9 15898 (其中-s 9 制定了传递给进程的信号是9,即强制.尽快终止进程)

linux如何查进程、杀进程

本文系转载,转载原文地址:http://blog.sina.com.cn/s/blog_637112040100vl53.html 1.查进程   ps命令查找与进程相关的PID号:   ps a 显示现行终端机下的所有程序,包括其他用户的程序.    ps -A 显示所有程序.    ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示.    ps -e 此参数的效果和指定"A"参数相同.    ps e 列出程序时,显示每个程序所使用的环境变量. 

RHCA学习笔记:RH442-Unit9内核定时与进程延时

Unit 9 Kernel Timing and Process Latency 内核定时与进程延时 学习目标: A.了解CPU 是怎样追踪时间的 B.调整CPU的访问次数 C.调整调度延时 D.虚拟机上的CPU任务调整 9.1How Linux tracks time Linux下的时间追踪 A. 硬件定时器是靠使用时钟来完成计时的. 包括以下时间资源: a. Real time clock(RTC):实时时钟是用来持久存放系统时间的设备,即便系统关闭后,它也可以靠主板上的微电池提供的电力保持