協程 5 task物件

2022-10-11 15:30:13 字數 1732 閱讀 1655

import asyncio

async def func():

print(1)

await asyncio.sleep(2)

print(2)

return '返回值'

async def main():

print('main開始')

# 建立task物件,將當前執行func函式任務新增到事件迴圈中

task1 = asyncio.ensure_future(func())

# 建立task物件,將當前執行func函式任務新增到事件迴圈中

task2 = asyncio.ensure_future(func())

print('main結束')

# 當執行某協程遇到io操作時,會自動化切換執行其他任務

# 此處await是等待相對應的協程全部執行完畢並獲取結果

ret1 = await task1

ret2 = await task2

loop = asyncio.get_event_loop()

loop.run_until_complete(main())

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

import asyncio

async def func():

print(1)

await asyncio.sleep(2)

print(2)

return '返回值'

async def main():

print('main開始')

# python3.6的寫法

tasks = [

asyncio.ensure_future(func()),

asyncio.ensure_future(func())

]"""

# python3.7的寫法[可以對task進行命名操作]

tasks = [

asyncio.create_task(func(), name='n1'),

asyncio.create_task(func(), name='n2')

]"""

print('main結束')

done, pending = await asyncio.wait(tasks)

print(done)

# python3.6的寫法

loop = asyncio.get_event_loop()

loop.run_until_complete(main())

"""# python3.7及以上的寫法

asyncio.run(main())

"""

示例3:

async def func():

print(1)

await asyncio.sleep(2)

print(2)

return '返回值'

tasks = [

asyncio.ensure_future(func()),

asyncio.ensure_future(func())

]loop = asyncio.get_event_loop()

done, pending = loop.run_until_complete(asyncio.wait(tasks))

print(done)

對協程的理解

對於作業系統來說,協程其實是一種特殊的執行緒,對於cpu來說,協程是非搶占式 程序和執行緒是搶占式的 實現機理如下 有兩個function a,b,a呼叫b,b要執行一段時間,很晚才返回,a不會因為等b而一直占用cpu,即a是非阻塞的。b返回後,a又能繼續執行。神奇的是,a和b又是走在一條獨木橋 橋...

對協程的理解

實現併發,可以使用多程序,多執行緒。程序和執行緒有個共同點,他們都是通過作業系統來排程的。而協程,則把排程的權力交給了程式設計師。協程可以看作使用者態下協作的執行緒。使用者態 是說協程的排程權屬於程式設計師。協作 是說協程的排程是協作式的,不是搶占的。在協程中,某部分可以通過呼叫某個方法,將控制權交...

Python下對協程的處理

所謂協程又稱為微執行緒,我們在程序在建立時,需要耗費時間和cpu資源 在建立多執行緒時,也需要消耗時間和資源。利用多協程的執行過程中,始終只要乙個執行緒,不存在建立執行緒和銷毀執行緒需要的時間 也沒有執行緒切換的開銷,任務需要開啟執行緒數越多,協程的優勢越明顯 更不需要多執行緒的鎖機制 gil im...