python异步调用函数报错

import asyncio
import websockets
from threading import Timer


async def fun():
    print("hello, world")
    Timer(1, fun).run()


loop = asyncio.get_event_loop()
loop.run_until_complete(fun())
loop.close()

img


请问一下这个问题是因为什么呢,怎么解决

asynnc/await协程语法是python3.7增加的新特性,尽管3.10都快发布了,但是协程这块还是有很多人不熟悉

基本概念 1. 协程是在单个线程中执行的多个任务
基本概念 2. asynnc/await要成对出现

Timer(1, fun).run()

这行代码做了什么呢

  1. 协程中创建了新线程 # 违背基本概念1
  2. 新线程中又创建了新协程
  3. 创建了新协程却不等待它 # 违背基本概念2

于是出现了 never awaited的提示

正确的例子:

import asyncio


async def fun():  # async 定义协程
    print("hello, ")
    await asyncio.sleep(1)  # await 等待另一个协程结束
    print(" world")


loop = asyncio.get_event_loop()  # 从当前线程中创建时间循环
loop.run_until_complete(fun())  # 执行协程,并等待完成
loop.close()

需要注意的是,以上代码只是使用了async/await的语法实现了异步,却没有实现并发
各中差别还需细细体味


协程是线程开销更低,但更复杂的并发编程方式,如果感觉吃力是正常的,建议先从多线程开始学起
如有帮助,还请【采纳】