使用asyncio模塊時碰到一個問題,代碼如下:
import asyncio
async def func():
print(1)
await asyncio.sleep(2)
print(2)
return "回傳值"
async def main():
print('main開始')
task_list = [
asyncio.create_task(func(),name='t1'),
asyncio.create_task(func(),name='t2')
]
print('main結束')
done,pending = await asyncio.wait(task_list,timeout=None)
print(done)
asyncio.run( main() )
其中的task_list中,加入name以后報錯
報錯資訊如下:
D:/作業學習檔案/爬蟲/爬蟲課件/protector/asyncio和task.py:12: RuntimeWarning: coroutine 'func' was never awaited
asyncio.create_task(func(),name='t1'),
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Traceback (most recent call last):
File "D:/作業學習檔案/爬蟲/爬蟲課件/protector/asyncio和task.py", line 20, in <module>
asyncio.run( main() )
File "D:\python3.7.6\lib\asyncio\runners.py", line 43, in run
return loop.run_until_complete(main)
File "D:\python3.7.6\lib\asyncio\base_events.py", line 583, in run_until_complete
return future.result()
File "D:/作業學習檔案/爬蟲/爬蟲課件/protector/asyncio和task.py", line 12, in main
asyncio.create_task(func(),name='t1'),
TypeError: create_task() got an unexpected keyword argument 'name'
uj5u.com熱心網友回復:
1、可以看下原始碼asyncio.create_task():def create_task(coro):
"""Schedule the execution of a coroutine object in a spawn task.
Return a Task object.
"""
loop = events.get_running_loop()
return loop.create_task(coro)
2、發現好像沒有這個name這個引數,所以改一下代碼:
import asyncio
async def func():
print(1)
await asyncio.sleep(2)
print(2)
return "回傳值"
async def main():
print('main開始')
task_list = [
asyncio.create_task(func())
# asyncio.create_task(func())
]
print('main結束')
done,pending = await asyncio.wait(task_list,timeout=None)
print(done)
asyncio.run( main() )
3、結果如下:
main開始
main結束
1
2
{<Task finished coro=<func() done, defined at F:/python_study/main.py:2> result='回傳值'>}
uj5u.com熱心網友回復:
確實沒有name就不報錯了,可是為什么加上name會報錯呢,我是根據老師寫的來的,老師的就沒有報錯,不知道是怎么回事
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/244887.html
上一篇:python篩選資料
