python - 在 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
解决方案
推荐阅读
- android - 上下文菜单在回收站视图中不起作用
- python - 将一行python代码分成多行
- docker - 在 gluster pod 中运行 gluster exporter 会发生什么?
- servlets - GenricServlet 和 ServletConfig 之间的关系是什么?
- react-native - 需要未知模块“607”。如果您确定该模块在那里,请尝试重新启动 Metro bundler
- c# - Kentico Facebook 登录 Web 部件不可见
- c# - 从网页发送通知时如何设置自定义android应用通知图标
- odoo - 在 Odoo11-module 中,如何创建导航栏动作
- django - neo4j 的短增量 uinque id
- c# - 从 DataGridview 检索数据到文本框