国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

深入淺析python定時殺進程

2019-11-25 16:45:22
字體:
來源:轉載
供稿:網友

之前寫了個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, schedschedule = 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 = 180schedule.enter(inc, 0, recycle_eval, (cmd, inc))schedule.run()

以上所述是小編給大家介紹的python定時殺進程的相關知識,希望能夠幫助到大家!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 始兴县| 安化县| 潞西市| 凤山市| 罗江县| 嘉义市| 沾化县| 伊金霍洛旗| 贺兰县| 民权县| 樟树市| 博罗县| 佛山市| 深泽县| 房山区| 乌兰县| 牡丹江市| 噶尔县| 潞西市| 通州区| 资溪县| 延川县| 建水县| 广灵县| 莱芜市| 习水县| 错那县| 安岳县| 襄城县| 平远县| 广德县| 青阳县| 乳源| 固始县| 江城| 正定县| 安溪县| 韶山市| 密云县| 新源县| 安新县|