У меня есть один модуль, который читает данные из сценария оболочки в режиме реального времени, и я хочу иметь возможность форматировать и обрабатывать каждую строку без сбоев и выводить данные с минимально возможной задержкой
начал изучать многопроцессорность, и я подумал, что лучшим способом было бы создать общий список и получить один процесс для добавления к нему, а другой (если в нем есть элементы) для чтения из него и выполнения обработки
manager = multiprocessing.Manager () line_queue = manager.list ()
manager = multiprocessing.Manager()
line_queue = manager.list()
def run_command(command, mylist):
process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
output = process.stderr.readline()
if output == '' and process.poll() is not None:
break
if output:
testline = output.strip().decode("utf-8")
mylist.append(testline)
rc = process.poll()
return rc
cmd = "shell script"
p = multiprocessing.Process(target=run_command, args=(cmd,line_queue))
p.start()
p.join()
Однако я не могу прочитать из этого списка, пока не завершится процесс "p", и если я не использую p.join () выдает:
File "/usr/lib/python3.7/multiprocessing/connection.py", line 619, in SocketClient
s.connect(address)
FileNotFoundError: [Errno 2] No such file or directory