Python爬蟲day6 非同步IO(協程)

2021-08-20 11:47:56 字數 1573 閱讀 2810

協程

乙個簡單的協程例子

# 產生n

defcountdown_gen

(n, consumer):

consumer.send(none) # 預激操作,等同於next(consumer)

while n > 0:

consumer.send(n)

n -= 1

try:

consumer.send(none) # 傳送空值,結束執行緒

except stopiteration:

pass

defcountdown_con

():while

true:

n = yeild # 消費乙個n

if n:

print('countdown', n)

sleep(1)

else:

break

defmain

(): consumer = countdown_con()

countdown_gen(10, consumer)

if __name__ == '__main__':

main()

快遞員送快遞(協程)
from random import randint

from time import sleep

from day0604myutils import coroutine

# 快遞員,送出包裹

@coroutine

defcreate_delivery_man

(name, capacity=1):

buffer =

while

true:

size = 0

pkg_name = yield

print('%s正在派送%s號包裹' % (name, pkg_name))

sleep(randint(1, 3))

# 快遞中心,產生包裹

defcreate_package_center

(consumer, max_packages):

# consumer.send(none) 預啟用 next(consumer)

num = 0

while num <= max_packages:

consumer.send('%d' % num)

num += 1

if num % 10 == 0:

sleep(randint(15, 30))

defmain

(): dm = create_delivery_man('王大錘')

create_package_center(dm, 50)

if __name__ == '__main__':

main()

# 預啟用包裝器

defcoroutine

(fn):

def(*args, **kwargs):

gen = fn(*args, **kwargs)

next(gen)

return gen

python爬蟲筆記 day6

mongodb mysql redis的區別和使用場景 mysql是關係型資料庫,支援事物 mongodb,redis非關係型資料庫,不支援事物 mysql,mongodb,redis的使用根據如何方便進行選擇 希望速度快的時候,選擇mongodb或者是redis 資料量過大的時候,選擇頻繁使用的資...

Python學習日記day6

字串型別及操作 知識點1 使用 m n k 根據步長對字串切片 m缺失表示至開頭,n缺失表示至結尾。k為步長,擷取的字串位置為m到n 1 知識點2 轉義符號 轉義符號後的字元為原始字元 知識點3 字串操作符 x y 連線兩個字串x和y n x 或 x n 複製n次字串x x in s 如果x是s的子...

Python學習之路 Day6

python 在執行過程中,遵循下面的基本原則 1 普通語句,直接執行 2 碰到函式,將函式體載入記憶體,並不直接執行 3 碰到類,執行類內部的普通語句,但是類的方法只載入,不執行 4 碰到if for等控制語句,按相應控制流程執行 5 碰到 break,continue等,按規定語法執行 6 碰到...