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...