協程函式應用

2022-08-02 19:15:11 字數 2040 閱讀 6536

1.套模板

def init(func):

res=func(*args,**kwargs)

next(res)

return res

def init(func):

res=func(*args,**kwargs)

next(res)

return res

@init #eater=init(eater)

def eater(name):

print('%s start to eat' % name)

food_list=

while true:

food = yield food_list

print('%s eat %s' %(name,food))

#e.send('123')

print(e.send('123'))

print(e.send('123'))

print(e.send('123'))

zhejiangf4 start to eat

zhejiangf4 eat 123

['123']

zhejiangf4 eat 123

['123', '123']

zhejiangf4 eat 123

['123', '123', '123']

2.作業1

1

'''2

檔名:a.txt,檔案內容如下:34

tesla 100000 1

5mac 3000 2

6lenovo 30000 3

7chicken 10 389

要求1:實現迭代器函式cat

10要求2:定義迭代器函式grep

11要求3:模擬管道的功能,將cat的處理結果作為grep的輸入

1213

# 定義迭代器cat

14# 定義迭代器grep

15# 模擬管道功能, 將cat的處理結果作為grep的輸入

16'''

17def

cat(file):

18with open(file) as f:

19for line in

f:20

yield

line.strip()

2122

defgrep(keywords,lines):

23for line in

lines:

24if keywords in

line:

25yield

line

26 g1 = cat('

b.txt')

27 g2 = grep('

',g1)

28for i in

g2:29

print(i)

3.作業2

#!/usr/bin/env python3

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

# 生成器的應用, 將下面的函式改為協程函式, 用send來傳送url

# def get(url):

# def index():

# return urlopen(url).read()

# return index

from urllib.request import urlopen

def get():

while true:       #while不斷做這個事。做乙個死迴圈. (如果沒有while根據next傳值send傳值做幾次)

url=yield #初始化過了,從暫停位置開始走,把send裡面的值傳給它yield,把yield的值再給url,在往下執行res,再列印

res=urlopen(url).read()

print(res)

g=get()

next(g) #初始化一下,讓函式停在那個位置

g.send('')

##爬網頁

python協程函式

例項 def menu x print welcome s to shaxian restaurant x men list while true print men list food yield men list print s start to eat s x,food g menu 張三 n...

協程巢狀協程

import asyncio import functools 第三層協程 async def test1 print 我是test1 await asyncio.sleep 1 print test1已經睡了1秒 await asyncio.sleep 3 print test1又睡了3秒 ret...

9 協程 協程理論

本節的主題是基於單執行緒來實現併發,即只用乙個主線程 很明顯可利用的cpu只有乙個 情況下實現併發,為此我們需要先回顧下併發的本質 切換 儲存狀態 ps 在介紹程序理論時,提及程序的三種執行狀態,而執行緒才是執行單位,所以也可以將上圖理解為執行緒的三種狀態cpu正在執行乙個任務,會在兩種情況下切走去...