首页 > 解决方案 > 在 Python 中的进程之间共享列表

问题描述

我有一个从 shell 脚本实时读取数据的模块,我希望能够格式化和处理每一行而不会失败,并以尽可能小的延迟输出

我已经开始研究多处理,我认为最好的方法是创建一个共享列表并让一个进程附加到它,另一个(如果其中有任何元素)从中读取并进行处理

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

标签: pythonmultiprocessingshared-memory

解决方案


推荐阅读