Python 多处理队列不向父进程发送数据
Python multiprocessing queue not sending data to parent process
所以我从 arduino 建立了蓝牙连接,读取操纵杆并通过蓝牙将轴读数发送到我的 raspberry pi (4b 运行ning ubuntu 20.10)。我已经确认它也在接收这些数据。
现在我尝试 运行 使用 python 多处理模块在单独的进程中进行此蓝牙通信。为了从 arduino 访问数据,我从父主进程给函数一个队列来把数据放在那里。然后在主函数中我不断地尝试从这个队列中读取数据并在那里处理数据。
然而,父进程中的队列始终为空,因此我无法进一步处理数据。
如何将蓝牙进程的数据传回主进程?
main.py
#!/usr/bin/env python3
import time
import logging
import multiprocessing as mp
import bluetoothlib
logging.basicConfig(level=logging.DEBUG)
logging.info("creating queue")
global q
q = mp.Queue()
def main():
try:
logging.info("starting bluetooth process")
p = mp.Process(target=bluetoothlib.serlistener, args=(q,))
p.start()
except:
logging.error("unable to start bluetooth listener")
logging.info("start reading from queue")
while True:
#logging.info(q.qsize())
if not q.empty():
mss = q.get()
logging.info(mss)
#do something with data
elif q.empty():
logging.info("queue empty")
time.sleep(1)
main()
bluetoothlib.py
#!/usr/bin/env python3
import os
import serial
import io
def serlistener(q):
print ("creating connection")
btConn = serial.Serial("/dev/rfcomm0", 57600, timeout=1)
btConn.flushInput()
sio = io.TextIOWrapper(io.BufferedRWPair(btConn, btConn, 1),encoding="utf-8")
print ("connection created, starting listening")
while btConn.is_open:
try:
mss = sio.readline()
q.put(mss)
except:
print("error")
break
在 thelizardking34 的建议下,我重新审视了我一直在搞乱的全局内容,并在更正之后,问题中现在给出的代码有效。
感谢 thelizardking34!
所以我从 arduino 建立了蓝牙连接,读取操纵杆并通过蓝牙将轴读数发送到我的 raspberry pi (4b 运行ning ubuntu 20.10)。我已经确认它也在接收这些数据。
现在我尝试 运行 使用 python 多处理模块在单独的进程中进行此蓝牙通信。为了从 arduino 访问数据,我从父主进程给函数一个队列来把数据放在那里。然后在主函数中我不断地尝试从这个队列中读取数据并在那里处理数据。
然而,父进程中的队列始终为空,因此我无法进一步处理数据。
如何将蓝牙进程的数据传回主进程?
main.py
#!/usr/bin/env python3
import time
import logging
import multiprocessing as mp
import bluetoothlib
logging.basicConfig(level=logging.DEBUG)
logging.info("creating queue")
global q
q = mp.Queue()
def main():
try:
logging.info("starting bluetooth process")
p = mp.Process(target=bluetoothlib.serlistener, args=(q,))
p.start()
except:
logging.error("unable to start bluetooth listener")
logging.info("start reading from queue")
while True:
#logging.info(q.qsize())
if not q.empty():
mss = q.get()
logging.info(mss)
#do something with data
elif q.empty():
logging.info("queue empty")
time.sleep(1)
main()
bluetoothlib.py
#!/usr/bin/env python3
import os
import serial
import io
def serlistener(q):
print ("creating connection")
btConn = serial.Serial("/dev/rfcomm0", 57600, timeout=1)
btConn.flushInput()
sio = io.TextIOWrapper(io.BufferedRWPair(btConn, btConn, 1),encoding="utf-8")
print ("connection created, starting listening")
while btConn.is_open:
try:
mss = sio.readline()
q.put(mss)
except:
print("error")
break
在 thelizardking34 的建议下,我重新审视了我一直在搞乱的全局内容,并在更正之后,问题中现在给出的代码有效。
感谢 thelizardking34!