預備知識
坑
使用非同步裝飾器裝飾協程比較寫法比較簡單,但是其中有乙個坑,那就是裝飾器中必須await method()
呼叫被裝飾協程,否則相當於沒有裝飾。
**
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @file : test_async_decorators.py
# @author: itnoobzzy
# @date : 2021/3/4
# @desc : 非同步裝飾器裝飾非同步方法
import functools
import asyncio
def async_decorators(method):
"""非同步裝飾器裝飾非同步方法
:param method: 被裝飾協程(非同步方法)
:return:
"""@functools.wraps(method)
print(f'裝飾器裝飾方法')
# 此處必須await 切換呼叫被裝飾協程,否則不會執行該協程
await method(*args, **kwargs)
@async_decorators
async def test_async_method(*args, **kwargs):
print('該協程被執行')
pass
if __name__ == '__main__':
coroutine = test_async_method()
loop = asyncio.get_event_loop()
task = loop.create_task(coroutine)
loop.run_until_complete(task)
正常執行結果:
裝飾器中去掉await method
,可以發現結果只允許了裝飾器(裝飾器會被預載入執行),沒執行被裝飾協程:
非同步I O 協程
什麼是協程呢?協程 coroutines 是一種比執行緒更加輕量級的存在,正如乙個程序可以擁有多個執行緒一樣,乙個執行緒可以擁有多個協程。協程不是被作業系統核心所管理的,而是完全由程式所控制,也就是在使用者態執行。這樣帶來的好處是效能大幅度的提公升,因為不會像執行緒切換那樣消耗資源。協程不是程序也不...
非同步程式設計 協程
現在是 python3.5 以後已經進入非同步時代 python由於gil 全域性鎖 的存在,不能發揮多核的優勢,其效能一直飽受詬病。然而在io密集型的網路程式設計裡,非同步處理比同步處理能提公升成百上千倍的效率,彌補了python效能方面的短板.現有的python 非同步框架 python 中的主...
非同步程式設計 協程
現在是 python3.5 以後已經進入非同步時代 python由於gil 全域性鎖 的存在,不能發揮多核的優勢,其效能一直飽受詬病。然而在io密集型的網路程式設計裡,非同步處理比同步處理能提公升成百上千倍的效率,彌補了python效能方面的短板.現有的python 非同步框架 python 中的主...