深入浅析python定时杀进程

作者:Focustc 时间:2021-10-23 17:14:15 

之前写了个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,杀进程
0
投稿

猜你喜欢

  • Python实现对照片中的人脸进行颜值预测

    2023-04-05 18:21:12
  • JS实现合并json对象的方法

    2023-08-29 15:09:30
  • Python Pandas学习之series的二元运算详解

    2023-12-16 01:58:30
  • PyTorch两种安装方法

    2022-04-16 04:11:50
  • Python3中的tuple函数知识点讲解

    2021-12-31 17:22:56
  • Python基于pandas爬取网页表格数据

    2023-03-13 07:30:32
  • python networkx 包绘制复杂网络关系图的实现

    2021-03-27 06:11:39
  • Python正则表达式使用经典实例

    2022-04-29 01:22:03
  • python实现获取单向链表倒数第k个结点的值示例

    2022-10-12 17:38:10
  • ASP中页面限权访问的几种方法

    2007-12-13 06:53:00
  • javascript面向对象技术基础(二)

    2010-02-07 13:09:00
  • Python脚本实现Zabbix多行日志监控过程解析

    2021-12-27 09:40:47
  • msxml3.dll (0x80070005)拒绝访问 解决方法

    2010-03-11 21:26:00
  • 自动备份mssql server数据库并压缩的批处理脚本

    2024-01-24 00:30:11
  • 一个数组随机不重复问题

    2008-09-02 20:05:00
  • 200行代码实现blockchain 区块链实例详解

    2024-05-02 16:28:46
  • delete from 表名与truncate table 表名区别

    2012-11-30 20:31:37
  • Vscode 基础使用教程大全

    2023-03-06 01:58:18
  • Python中matplotlib如何改变画图的字体

    2023-02-19 16:46:38
  • asp如何正确理解MIME类型?

    2010-06-28 18:21:00
  • asp之家 网络编程 m.aspxhome.com