[英]Python multiprocessing queue not sending data to parent process
所以我從 arduino 獲得了藍牙連接,讀取操縱桿並將軸讀數通過藍牙發送到我的樹莓派(4b 運行 ubuntu 20.10)。 我已經確認它也收到了這些數據。
現在我嘗試使用 python 多處理模塊在單獨的進程中運行此藍牙通信。 為了從 arduino 訪問數據,我給 function 一個來自父主進程的隊列,以便將數據放入其中。 然后在主 function 中,我不斷嘗試從該隊列中讀取並處理那里的數據。
但是,父進程中的隊列始終為空,因此我無法進一步處理數據。
如何將藍牙進程中的數據返回到主進程?
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 的建議下,我重新查看了我一直在搞亂的全局內容,在更正之后,問題中給出的代碼有效。
感謝蜥蜴王34!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.