多工非同步協程實現

2021-10-13 22:40:57 字數 1206 閱讀 6753

#!/usr/bin/env python

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

import random

import time

import asyncio

async

defeat

(name)

:print

('%s開始吃西瓜啦!'

%name)

sleep_time=random.randint(1,

3)# 在非同步協程中如果出現了同步模組相關的**,那麼就無法實現非同步。所以我們需要用 基於非同步的模組實現

# time.sleep(sleep_time)

# 基於非同步模組的**, 當在asyncio中遇到阻塞操作時,必須進行手動掛起

await asyncio.sleep(sleep_time)

# await 用來掛起阻塞方法的執行

print

('%s吃飽啦'

%name)

loop = asyncio.get_event_loop(

)start_time=time.time(

)tasks=

for i in[1

,2,3

,4,5

]:c=eat(i)

task=loop.create_task(c)

# 將 多工列表 tasks 封裝到wait中

loop.run_until_complete(asyncio.wait(tasks)

)# 此處不能直接將 tasks 列表放入loop.run_until_complete,需要將tasks多工的列表封裝到wait中,否則會有語法錯誤,這是固定語法措施

end_time=time.time(

)print

('總共用時:'

,end_time-start_time)

執行結果:

1開始吃西瓜啦!

2開始吃西瓜啦!

3開始吃西瓜啦!

4開始吃西瓜啦!

5開始吃西瓜啦!

2吃飽啦

3吃飽啦

5吃飽啦

1吃飽啦

4吃飽啦

總共用時:

3.019543409347534

process finished with exit code 0

aiohttp模組實現多工非同步協程實現非同步爬蟲

匯入 aiohttp 模組,使用該模組中的 clientsession 類,例項化乙個物件進行網路請求 urls async defget page url print 正在請求 url 例項乙個session物件 注意 使用aiohttp時,用到的 是字串形式,而requests 是字典形式 as...

非同步爬蟲 多工非同步協程示例

import asyncio import time async def request url 在非同步協程中如果出現了同步模組相關的 那麼就無法實現非同步 await asyncio.sleep 2 當asyncio中遇到阻塞操作必須進行手動掛起 任務列表,用於存放多個任務物件 stasks f...

多工 協程

示例 import time defwork1 while true print 正在掃地 yield defwork2 while true print 正在搬磚 yield w1 work1 w2 work2 協程肯定是併發執行 while true next w1 next w2 greenl...