Проблемы с синхронизацией при чтении файла - PullRequest
0 голосов
/ 22 октября 2018

У меня есть два разных процесса.Давайте назовем их 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), прежде чем она приведет к строке.

Любые предложения будут полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...