Python連載38-協程、可迭代、迭代器、生產者消費者模型

来源:https://www.cnblogs.com/ruigege0000/archive/2019/09/19/11546516.html
-Advertisement-
Play Games

一、生產者消費者模型 二、協程 1.協程參考資料: http://python.jobble.com/86481/ http://python.jobble.com/87310/ https://segmentfault.com/a/1190000009781688 2.迭代器參考資料 可迭代(it ...


一、生產者消費者模型

import multiprocessing

from time import ctime

def consumer(input_q):

    print("Into consumer:",ctime())

    while True:

        #處理項

        item = input_q.get()

        print("pull",item,"out of q")#此處替換為有用的工作

        input_q.task_done()#發出信號通知任務完成

    print("Out of consumer:",ctime()) #此句未執行,因為q.join()收集到四個task_done()信號後,主進程啟動

def producer(sequence,output_q):

    print("Into producer:",ctime())

    for item in sequence:

        output_q.put(item)

        print("put",item,"into_q")

    print("Out of producer:",ctime())

#建立進程

if __name__ == "__main__":

    q=multiprocessing.JoinableQueue()

    #運行消費者進程

    cons_p = multiprocessing.Process(target=consumer,args=(q,))

    cons_p.daemon = True

    cons_p.start()

​

    #生產多個項,sequence代表要發送給消費者的項序列

    #在實踐中,這可能是生成器的輸出或通過一些其他方式生產出來的

    sequence = [1,2,3,4]

    producer(sequence,q)

    #等待所有項被處理

    q.join()

 

二、協程

1.協程參考資料:

http://python.jobble.com/86481/

http://python.jobble.com/87310/

https://segmentfault.com/a/1190000009781688

2.迭代器參考資料

可迭代(iterable):直接作用於for迴圈變數

迭代器(Iterator):不但可以作用於for迴圈,還可以被next調用

3.關係:list是一個典型的可迭代對象,但是不是一個迭代器,因為list不可以被next調用

4.判斷標準:通過isinstance來判斷某個變數是否是一個實例,判斷是否可以迭代

from collections import Iterable,Iterator

​

l = [i for i in range(5)]  #可迭代

print(isinstance(l,Iterable))#判斷是否可迭代

print(isinstance(l,Iterator))#判斷是否是一個迭代器

​

s_iter = iter(l)#將其轉換為可以迭代的和迭代器

print(isinstance(s_iter,Iterable))#判斷是否可迭代

print(isinstance(s_iter,Iterator))#判斷是否是一個迭代器


三、源碼

d26_2_consumer_and_producer_model.py

d27_1_iterable_and_iterator_and_their_transform.py

https://github.com/ruigege66/Python_learning/blob/master/d26_2_consumer_and_producer_model.py

https://github.com/ruigege66/Python_learning/blob/master/d27_1_iterable_and_iterator_and_their_transform.py​

2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是今天在寫vue項目時發生的一個小問題,在此記錄一下,方便自己的回顧。項目是前後端分離的,前臺主要使用了vue-cli3.0 + mintui,是一個移動端的web app包括了後臺發佈管理的一些功能,其他就先不介紹了,項目後期方便的話我會截取一些代碼發佈在我的github上,自己也是第一次嘗試用 ...
  • if(window.plus)//判斷當前的設備是手機 window.localStorage.setItem("key","value");//設置值 window.localStorage.getItem("key");//獲取值 ...
  • 抄寫多語言組件,基於ice-plugin-fusion為iceworks的“ICE Design Pro”實現一個多主題切換功能 ...
  • JavaScript比較當前時間是否在指定時間段內,js 判斷當前時間(或者所選時間)是否在某一時間段 ...
  • 背景 從第一臺電腦誕生到現在已經七十多年了,電腦已經和我們的生活息息相關,很多小伙伴上來就接觸高端設備,電腦過去是怎麼發展起來的,我覺得還是瞭解一下會比較好,我是歷史愛好者,所以我個人認為學習任何東西都要瞭解它的過去,就像我以前歷史老師跟我說的“不瞭解過去的人,不會瞭解現在和未來”,這篇文章就 ...
  • 場景 我的CSDN: https://blog.csdn.net/BADAO_LIUMANG_QIZHI 實現 馬士兵Java學習視頻 方立勛JavaWeb 尚矽谷Python核心基礎 數據分析 機器學習 MYSQL 500本電子書 機器學習深度學習篇 軟體測試全套教程 Bootsrap 大數據從0 ...
  • 之前一次公司培訓的時候,將它記錄下來,https://www.cnblogs.com/AlvinLee/p/10180536.html這個博客上面比較全面。 1、擴展方法 擴展方法時一種特殊的靜態方法,可以像該類的實例方法一樣使用,能夠在不添加新的派生類,重新編譯的秦光霞,向現有類添加功能 註意事項 ...
  • 1.代碼生成器: [正反雙向](單表、主表、明細表、樹形表,快速開發利器)freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本、處理類、service等完整模塊2.多數據源:(支持同時連接無數個資料庫,可以不同的模塊連接不同數的據庫)支持N個數據源3.阿裡資料庫連 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...