亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2021年07月04日 16:19:52   作者:AI + UTO | Robot  
這篇博客就結合實際的python程序通過隊列實現進程交互,通過程序分析需要的庫函數,對python樹莓派進程交互相關知識感興趣的朋友一起看看吧

寫在前面

現在購物車有一任務需求,那就是需要進行圖像識別和運動控制,因此需要初始化2個進程,從而分別完成相應的動作。因為運動控制需要圖像識別的結果,因此現在就涉及到了python語法實現2個進程之間的協(xié)同合作,這篇博客就結合實際的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進行加入系統(tǒng)調度
q1.qsize()#查看q1隊列的大小

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

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

有了上述的基本函數之后就可以來看我們的程序實現了,可以看到在程序中首先進行了進程的初始化,啟動和加入系統(tǒng)調度,運行完這些語句之后就可以認為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\n")
        time.sleep(1)

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

在這里我提出一個問題:

那就是當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函數里面只是做了線程啟動的操作,我們再來看一下輸出結果:

在這里插入圖片描述

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

到此這篇關于python樹莓派通過隊列實現進程交互的程序分析的文章就介紹到這了,更多相關python樹莓派進程交互內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python定義二叉樹及4種遍歷方法實例詳解

    Python定義二叉樹及4種遍歷方法實例詳解

    這篇文章主要介紹了Python定義二叉樹及4種遍歷方法,結合實例形式較為詳細的分析了二叉樹的概念、原理,以及Python定義與遍歷二叉樹相關操作技巧,需要的朋友可以參考下
    2018-07-07
  • Python對HTML轉義字符進行反轉義的實現方法

    Python對HTML轉義字符進行反轉義的實現方法

    這篇文章主要介紹了Python對HTML轉義字符進行反轉義的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 結束運行python的方法

    結束運行python的方法

    在本篇文章里小編給大家分享的是關于結束運行python的方法以及相關代碼,有需要的朋友們跟著學習下。
    2020-06-06
  • python工廠方法模式原理與實現

    python工廠方法模式原理與實現

    大家好,本篇文章主要講的是python工廠方法模式原理與實現,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Python開發(fā)實例分享bt種子爬蟲程序和種子解析

    Python開發(fā)實例分享bt種子爬蟲程序和種子解析

    最近瘋狂的研究DHT網絡技術,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2014-05-05
  • 淺談Selenium+Webdriver 常用的元素定位方式

    淺談Selenium+Webdriver 常用的元素定位方式

    這篇文章主要介紹了淺談Selenium+Webdriver 常用的元素定位方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • python字符串的一些常見實用操作

    python字符串的一些常見實用操作

    字符串是Pyhon常用的數據類型,我們可以用引號來創(chuàng)建字符創(chuàng)(可以是單引號也可以是雙引號,當然引號必須是英文的),這篇文章主要給大家介紹了關于python字符串的一些常見實用操作,需要的朋友可以參考下
    2022-04-04
  • Python使用Keras庫中的LSTM模型生成新文本內容教程

    Python使用Keras庫中的LSTM模型生成新文本內容教程

    Python語言使用金庸小說文本庫,對文本進行預處理,然后使用Keras庫中的LSTM模型創(chuàng)建和訓練了模型,根據這個模型,我們可以生成新的文本,并探索小說的不同應用
    2024-01-01
  • python 輸出一個兩行字符的變量

    python 輸出一個兩行字符的變量

    昨天被一個哥們問怎么用 python輸出一個兩行字符的變量。寫了N個方法都覺得麻煩。
    2009-02-02
  • 淺析python 字典嵌套

    淺析python 字典嵌套

    這篇文章主要介紹了python 字典嵌套的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09

最新評論