python - 如何使用多处理Queue()在进程之间传递变量?
问题描述
我正在尝试并行运行两个单独的 python 进程,并且这些进程需要来回传递数据。我包含的 MCV 反映了我正在使用的底层包的结构 - 我希望使用多处理的解决方案能够消除从根本上改变任何一个底层代码的需要。
总结一下交互,1) 子进程启动并向队列添加一个初始值 2) 父进程然后应该获取该值,做一些事情,并将新值返回到另一个队列 3) 子进程读取并打印. (实际上,这两个过程都是独立的循环,将运行数千次迭代来回传递数据......希望如此)
但是,一切都挂起,等待父进程启动(即,在第 1 步之后)。子进程是否阻止父进程运行?
我在这里浏览了许多相似但又不完全相同的场景以及多处理文档和许多教程,但我无法弄清楚到底是什么导致了问题。
import multiprocessing
from multiprocessing import Process
from time import sleep
def sub_func(x,q1,q2):
queue1 = q1
queue2 = q2
y = x*x
queue1.put(y)
#print(queue1.qsize())#prints 1 as expected
while queue2.empty():
sleep(0.01) # Hangs here
z = queue2.get()
print(z)
def start_sub(q1,q2):
sub_func(5,q1,q2)
class parent():
def main_func():
while q1.empty():
sleep(0.01)
y = q1.get()
z = y*y
q2.put(z)
if __name__=='__main__': # Is this necessary?
q1 = multiprocessing.Queue()
q2 = multiprocessing.Queue()
subprocess = Process(target=start_sub(q1,q2))
subprocess.start()
print('subprocess started') # Doesn't get executed
parent.main_func() # Does main need q1,q2 passed?
我已经注释了要包含的代码(我认为)正在发生,即子进程已成功启动但挂起等待父进程将项目添加到队列(q2)。似乎父进程甚至还没有开始。
看到我需要两个进程同时运行,使用 .join() 等待子进程结束将不起作用。
真的很感激任何关于如何解决这个问题的建议,或者如果我完全走错了路,也许是朝着正确的方向轻推?
解决方案
推荐阅读
- html - 我需要哪个 CSS 将一段文本标记为突出显示?
- css - 是否可以仅将引导库用于“百里香”中没有页眉和页脚的内容?
- database - 如何在moodle数据库中进行手动更改?
- python - 为什么运行“setup.py test”会运行我的控制台脚本?
- node.js - 在成功/错误情况下都会触发回调函数
- html - Safari 的标题上未显示徽标和按钮
- r - MWS API 签名与 R 不匹配
- python-2.7 - 重置内置常量
- c# - 在 UWP 应用中使用 SHGetKnownFolderPath 是否违规?
- facebook - 向 Messenger API 发送自动回复失败并出现令牌错误