Python последствия чтения текстового файла 600x-1200x в минуту - PullRequest
0 голосов
/ 29 сентября 2018

Имеет ли чтение txt файла с python до 1200x раз в минуту, какие-либо последствия любого рода?

Я делаю над проектом, где одна из программ находится в вечном цикле и не очень легко передать его любойаргументы (не хочу использовать поток или многопроцессорность (передавать переменные между интерпретаторами) для передачи аргументов).

(я использую Raspberry pi)

Природа кода:

import time
while True:
    with open('args.txt', 'r') as FILE:
        ARGS = FILE.read()
    time.sleep(0.05)

Если это небезопасно, есть ли лучшее решение, как поддерживать работу программы, проверяя каждые 0,05 с на чтение какого-либо внешнего источника данных?Заранее спасибо

1 Ответ

0 голосов
/ 29 сентября 2018

Если вы являетесь пользователем Linux, вы, возможно, знакомы с tail -f filename.txt.

Вместо того, чтобы просто отображать последние несколько строк и выходить из него, tail отображает строки, а затем отслеживает файл.Когда новые строки добавляются в файл другим процессом, tail обновляет отображение.

Если ваш сценарий использования заключается в чтении новых строк, добавленных в файл, то это реализация tail -f.

file = open(filename,'r')
#Find the size of the file and move to the end
st_results = os.stat(filename)
st_size = st_results[6]
file.seek(st_size)
import time
while 1:
   where = file.tell()
   line = file.readline()
   if not line:
       time.sleep(0.05)
       file.seek(where)
   else:
       print line, # already has newline

Этот метод непрерывно проверяет каждые 0,05 с и печатает добавленные новые строки.

Альтернативно здесь tail -f в качестве подпроцесса:

from subprocess import Popen, PIPE, STDOUT
p = Popen(["tail", "-f", "/the/file"], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
for line in p.stdout:
    print(line)

Если файлдобавляется подпроцессом, это еще проще, просто передайте стандартный вывод вашей функции.

...