Python基礎 協程 yield關鍵字

2021-08-14 01:57:59 字數 987 閱讀 6395

乙個執行緒寫訊息,乙個執行緒取訊息,通過鎖機制控制佇列和等待,但一不小心就可能死鎖

生產者生產訊息後,直接通過yield跳轉到消費者開始執行,待消費者執行完畢後,切換回生產者繼續生產,效率極高

# main.py

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

# python基礎-協程-生產者和消費者模式

# 消費者

defconsumer

(): r = ""

while

true:

# 有yield關鍵字就表示該函式是generator函式了

# 作為回報 print(b)寫成 yield(b)

# 遇到 yield 語句返回

n = yield r

print("消費者 讀訊息 %s" % n)

# 生產者

defproduce

(c):

# 啟動生成器

c.send(none)

n = 0

while n < 5:

n = n + 1

print("生產者 寫訊息 %s" % n)

# 通知消費者

c.send(n)

c.close()

c = consumer()

produce(c)

d:\pythonproject

\sustudy>python main.py

生產者 寫訊息 1

消費者 讀訊息 1

生產者 寫訊息 2

消費者 讀訊息 2

生產者 寫訊息 3

消費者 讀訊息 3

生產者 寫訊息 4

消費者 讀訊息 4

生產者 寫訊息 5

消費者 讀訊息 5

協程 yield關鍵字 generator函式 生產者-消費者模型

Python基礎 協程

協程是一種使用者態的輕量級執行緒,本質上是單執行緒 協程擁有自己的暫存器上下文和棧。協程排程切換時,將暫存器上下文和棧儲存到其他地方,在切回來的時候,恢復先前儲存的暫存器上下文和棧。使用greenlet實現協程操作,greenlet需要手動進行切換 首先需要使用greenlet建立類似與堆疊空間,然...

yield實現 coroutine協程案例

yield可以手工實現協程,但python為我們封裝了乙個greenlet,先看看yield實現,yield需要手工操作,無法實現io操作時自動切換協程,greenlet是封裝好的,能方便使用io切換!importtime importqueue defconsumer name print sta...

Python基礎 34 協程

概述 協程,又稱微執行緒,也稱為使用者級執行緒,在不開闢執行緒的基礎上完成多工,也就是在單執行緒的情況下完成多工,多個任務按照一定順序交替執行,通俗理解只要在def裡面只看到乙個yield關鍵字,就表示它是協程 簡單理解 協程是實現多工的一種方式 1 無需執行緒上下文切換的開銷,協程避免了無意義的排...