Совместное использование списка между процессами в Python - PullRequest
1 голос
/ 08 марта 2020

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

начал изучать многопроцессорность, и я подумал, что лучшим способом было бы создать общий список и получить один процесс для добавления к нему, а другой (если в нем есть элементы) для чтения из него и выполнения обработки

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...