js date 当前日志往后一个月_【应用实例】如何利用 Python 生成器 yield 监控日志?...
Python 生成器 yield 是編寫(xiě)基于處理管道,流或數(shù)據(jù)流程序的一種極其強(qiáng)大的方式,在《Python參考手冊(cè)》中有一則實(shí)例非常簡(jiǎn)單實(shí)用,略加修改,分享一下給大家。如果你對(duì)生成器yield還不是很了解,可以查看《覺(jué)得Python中的生成器(yield)晦澀難懂?看完本文你就知道了》。
Python生成器yield應(yīng)用實(shí)例—監(jiān)控日志源碼下載
需求分析
假設(shè)服務(wù)器有一個(gè)日志文件,每隔一秒都會(huì)更新日志的內(nèi)容,日志每行中都有一組類似:2017-12-21 14:07:26.471691 99123 數(shù)據(jù)被寫(xiě)入日志。 我們的目的是分析日志中的數(shù)字如果大于5000就要打印出來(lái)。 這樣來(lái)看,我們需要一個(gè)程序負(fù)責(zé)模擬日志寫(xiě)入,另一個(gè)程序負(fù)責(zé)分析日志打印數(shù)據(jù)。
模擬日志寫(xiě)入
server_log.py:
import random from datetime import * import os import timedef server_log():# 生成模擬的日志數(shù)據(jù)server_int = random.randint(1,99999)#生成需要的隨機(jī)數(shù)server_date = datetime.now()#獲取當(dāng)前系統(tǒng)時(shí)間return str(server_date) + ' ' + str(server_int)#拼裝日志字符串while True:#模擬系統(tǒng)寫(xiě)入日志#打開(kāi)日志文件并寫(xiě)入日志with open(os.path.join(os.path.dirname(__file__),'server_log.log'),'at') as f :s = server_log()print(s)f.write(s + 'n')time.sleep(1)上邊的代碼已經(jīng)添加了相關(guān)的注釋,這樣我們就有了一個(gè)日志文件,每秒會(huì)有一第記錄插入到日志中。
利用生成器yield解析日志
生成器可以返回一個(gè)迭代的流式的對(duì)象,我們可以通過(guò)這種方式便捷的獲得相關(guān)數(shù)據(jù),而且代碼也更清晰易懂
tail.py 代碼如下:
import timedef tail(f):f.seek(0,2)#移動(dòng)到文件尾部。while True:line = f.readline()if not line :time.sleep(1)continueyield linedef grep(lines):for l in lines:k = int(l.split()[2])if k >50000:yield lserverlog = tail(open('server_log.log')) lines = grep(serverlog)for line in lines:print(line)我們運(yùn)行兩個(gè)文件看下效果:
代碼雖然簡(jiǎn)單,但值得細(xì)細(xì)品味,感受python的簡(jiǎn)約與強(qiáng)大吧。
【專業(yè)Python IDE推薦】——PyCharm
PyCharm 是一款Python IDE,其帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具。此外,該IDE提供了一些高級(jí)功能,以用于Django框架下的專業(yè)Web開(kāi)發(fā)。
總結(jié)
以上是生活随笔為你收集整理的js date 当前日志往后一个月_【应用实例】如何利用 Python 生成器 yield 监控日志?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: float 精度_float相加产生精度
- 下一篇: 很多人调用接口会阻塞吗_锻炼的真相你知道