У меня есть простой цикл вроде:
#Core Loop
chunk_size=1000
while True:
line_c = 0
chunk_array = []
while True:
line = sys.stdin.readline()
line_c +=1
m = line_regex.match(line)
if m:
chunk_array.append(m.groupdict())
if line_c >= chunk_size:
#print top_value(chunk_array, 'HTTP_HOST', 10)
print stats(chunk_array, 'HTTP_HAPROXY_TT')
break
Сценарий называется Unix-фильтром, например:
tail -f /var/log/web/stackoverflow.log | python logFilter.py
Вместо того, чтобы печатать каждые X строк, что будетхороший способ реорганизовать этот цикл для выполнения каждые X секунд?
Ссылка:
Функция статистики:
def stats(l, value):
'''stats of an integer field'''
m = []
for line in l:
if line[value].isdigit():
m.append(int(line[value]))
return "Mean: %s Min: %s Max: %s StdDev: %s" % (mean(m), amin(m), amax(m), std(m))
Входные данные будут являться строками сетиВ файле журнала line_regex
превращает их в пары значений полей (groupdict
).Вывод при использовании функции статистики выглядит следующим образом:
tail -f /var/log/web/stackoverflow.log | python logFilter.py -f HTTP_HAPROXY_TR -t stats
Mean: 183.43919598 Min: 0 Max: 3437 StdDev: 321.673112066
Mean: 182.768304915 Min: 0 Max: 2256 StdDev: 255.039386654
Mean: 142.672064777 Min: 0 Max: 1919 StdDev: 208.870675922
Таким образом, эти строки статистики печатаются каждый раз, когда скрипт получает 1000 строк.Вместо того, чтобы делать это каждые X строк, я хотел бы изменить цикл так, чтобы это происходило, скажем, каждые 10 секунд.