讓我們考慮含有ASYNCIO環和一個異步協程類的下面的例子:Python中,ASYNCIO:裝飾類,以簡化循環語法
import asyncio
class Async:
def __init__(self):
self.loop=asyncio.get_event_loop()
async def function(self, word):
print(word)
await asyncio.sleep(1.0)
a=Async()
a.loop.run_until_complete(a.function("hello_world"))
這確實工作。
我想創建一個裝飾,這樣我可以簡化代碼調用function
的語法
a.function("hello_world")
我試過如下:
class Async:
def __init__(self):
self.loop=asyncio.get_event_loop()
def async_loop(f):
def decorated(*args, **kwargs):
self.loop.run_until_complete(f(*args, **kwargs))
@async_loop
async def function(self, word):
print(word)
await asyncio.sleep(1.0)
a=Async()
a.function("hello_world")
在這一點上我收到的錯誤:'NoneType' object is not callable
。 - 我也嘗試在類之外擁有裝飾器功能,但我得到了同樣的錯誤。我不確定裝飾器功能是否最好地站在claass(作爲方法)內部或外部。 我對Python非常陌生,所以類中的Asyncio,裝飾器和裝飾器對我來說仍然相當混亂。任何好的靈魂會有一個想法如何正確地執行該代碼?
你犯了一個經典失誤。 'async_loop'必須返回'裝飾的'。 – PaulMcG
@PaulMcG ok是的 - 現在我收到其他錯誤,相對於'self.loop',它仍然是超級混亂如何在我的課堂做裝飾,所以在這裏的幫助將非常感謝,因爲weel –