中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python樹莓派通過隊列怎么實現進程交互的程序

發布時間:2022-03-29 16:08:44 來源:億速云 閱讀:91 作者:iii 欄目:移動開發

本文小編為大家詳細介紹“python樹莓派通過隊列怎么實現進程交互的程序”,內容詳細,步驟清晰,細節處理妥當,希望這篇“python樹莓派通過隊列怎么實現進程交互的程序”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

寫在前面

現在購物車有一任務需求,那就是需要進行圖像識別和運動控制,因此需要初始化2個進程,從而分別完成相應的動作。因為運動控制需要圖像識別的結果,因此現在就涉及到了python語法實現2個進程之間的協同合作,這篇博客就結合實際的python程序通過隊列實現進程交互通過隊列實現進程交互

程序分析

首先介紹一下我們的需要的庫函數:

import time
from multiprocessing import Process, Queue

from multiprocessing import Process, Queue是主要的庫,作用就是提供隊列和進程操作函數,在本次測試中我們用的的進程和隊列操作函數有:

q1.get()#獲取q1隊列里的內容
q1.put("q1 put things1")#往q1隊列里面加入內容
p1 = Process(target=test1, args=(q1, q2))#初始化p1進程
p1.start()#啟動p1進程
p1.join()#將p1進行加入系統調度
q1.qsize()#查看q1隊列的大小

測試中的線程與進程對應關系:

q1隊列 -> q1進程
q2隊列 -> q2進程

有了上述的基本函數之后就可以來看我們的程序實現了,可以看到在程序中首先進行了進程的初始化,啟動和加入系統調度,運行完這些語句之后就可以認為p1和p2進程初始化好了。

p1 = Process(target=test1, args=(q1, q2))
p2 = Process(target=test2, args=(q1, q2))

p1.start()
p2.start()

p1.join()
p2.join()

進程初始化完畢之后就可以來看主要的測試函數了,首先是test1

def test1(q1, q2):
    q1.put("fisrt data")
    while(1):
        s = q2.get()
        print("q2 left + " + str(q2.qsize()))
        print("q1 get + " + s)
        q1.put("q1 put things1")
        q1.put("q1 put things2
")
        time.sleep(1)

在之前的初始化函數中,我們是先初始化了p1進程,也就是test1會先運行,因此為了保證在開始的時候進程的隊列里面有內容,我先在函數的最開始就在q1隊列中加入了內容“fisrt data”,為了保證測試持續進行,因此我將test1進程設成了死循環,在test1中,會先去獲取q2隊列里的內容和q2隊列大小并打印,然后會在q1隊列中放入新的內容,請注意,這里放入了2個節點的數據,分別是“q1 put things1”和“q1 put things2 ”

在這里我提出一個問題:

那就是當p1進程去獲取q2隊列里的內容的時候,p1進程會將q2隊列里的全部內容都取出還是只會取出q2隊列最前面的那個數據呢?

接下來我們就來解決一下這個問題。接下來我們來看一下test2函數里面干了些什么:

def test2(q1, q2):
    while(1):
        s = q1.get()
        print("q1 left + " + str(q1.qsize()))
        print("q2 get + " + s)
        q2.put("q2 put data1")
        time.sleep(1)

test2函數中做的事情就比較少了,就是先獲取了q1隊列中的數據和q1剩余隊列大小并打印,接著往q2隊列加入“q2 put data1”。

結果分析

我們來看一下main函數里面的調用:

if __name__ == "__main__":
    p1 = Process(target=test1, args=(q1, q2))
    p2 = Process(target=test2, args=(q1, q2))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

在main函數里面只是做了線程啟動的操作,我們再來看一下輸出結果:

python樹莓派通過隊列怎么實現進程交互的程序

從結果中我們可以很清楚的看到,q1線程每次會加入2個節點數據,然后p2進程會從q1線程中做q1.get()的操作,隨著循環次數的不斷增加,我們可以發現q1隊列的長度不斷增加,從而我們可以得出結論:
p1進程去獲取q2隊列里的內容的時候,p1進程會將q2隊列最前面的那個數據取出

讀到這里,這篇“python樹莓派通過隊列怎么實現進程交互的程序”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屏边| 乐东| 车致| 曲阳县| 阳信县| 孝昌县| 方城县| 遂昌县| 无极县| 青川县| 克什克腾旗| 木里| 什邡市| 杭州市| 罗平县| 大港区| 彭泽县| 大埔县| 黄平县| 房产| 灵石县| 东丰县| 鄂尔多斯市| 长泰县| 黄冈市| 枞阳县| 阿鲁科尔沁旗| 昭觉县| 正安县| 桐梓县| 浦县| 灵璧县| 沙河市| 安陆市| 无极县| 河池市| 博野县| 鹿邑县| 东乡族自治县| 新晃| 龙岩市|