У меня есть два разных процесса.Давайте назовем их A и B.
A (написанный на C) записывает данные в текстовый файл (dump.txt).Он сбрасывает данные, как только появляется printf.и B (написанный на Python3) периодически читает данные из текстового файла для указанной метки времени.
Способ чтения с помощью B следующий:
import os
import time
import subprocess
ctime = time.time()
tail_lat = "cat " + "dump.txt" + " | egrep '" + str(int(ctime)) + "' | cut -d \, -f 2,10"
print("last modified: {}, curr_time={}".format(time.ctime(os.path.getmtime(self.input_file)), ctime))
maxRetries = 3
retries = 0
while retries < maxRetries:
process = subprocess.Popen(tail_lat, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = process.communicate()
self.logger.info('ctime={} out = {}, retries={}'.format(ctime, out.decode(), retries))
try:
values = [float(x) for x in out.decode().split("\n")[:-1][0].split(",")]
load = values[0]
latency = values[1]
break
except IndexError:
time.sleep(0.01)
retries+=1
if retries == 3:
load = 0
latency = 0
Как видноЕсть некоторые проблемы с синхронизацией, из-за которых я не могу прочитать данные из определенных строк
last modified: Mon Oct 22 13:23:30 2018, curr_time=1540207411
load=0, latency=0
last modified: Mon Oct 22 13:23:32 2018, curr_time=1540207412
load=99833.900166, latency=0.2381
last modified: Mon Oct 22 13:23:33 2018, curr_time=1540207413
load=100713.899286, latency=0.2631
last modified: Mon Oct 22 13:23:34 2018, curr_time=1540207414
load=100346.899653, latency=0.2251
last modified: Mon Oct 22 13:23:35 2018, curr_time=1540207415
load=100268.899731, latency=0.2301
last modified: Mon Oct 22 13:23:36 2018, curr_time=1540207416
load=100298.899701, latency=0.4261
last modified: Mon Oct 22 13:23:37 2018, curr_time=1540207418
load=0, latency=0
last modified: Mon Oct 22 13:23:38 2018, curr_time=1540207419
load=0, latency=0
last modified: Mon Oct 22 13:23:39 2018, curr_time=1540207420
load=0, latency=0
last modified: Mon Oct 22 13:23:41 2018, curr_time=1540207421
load=98935.901064, latency=138.1
Можно ли читать асинхронно с использованием генератора в Python?Я смотрел на это , но не мог найти способ проверить, совпадает ли отметка времени (ctime), прежде чем она приведет к строке.
Любые предложения будут полезны.