簡體   English   中英

Python 多處理隊列未向父進程發送數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM