You need to enable JavaScript to run this app. Python如何在程序启动时运行async异步代码?
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在程序启动时运行async异步代码?

解决方案

根据你的使用场景分两种实现方式,均无需修改现有异步逻辑:

1. 纯异步独立程序场景

Python 3.7+ 官方提供了asyncio.run()作为异步程序的统一入口,会自动管理事件循环的生命周期,任务执行完成后自动回收资源,不会出现冗余占用:

import asyncio

async def mainMenuCLI():
  print("This is the CLI")
  # 你的async_input等异步逻辑直接写在这里即可

if __name__ == "__main__":
  # 直接作为入口运行
  asyncio.run(mainMenuCLI())

如果需要同时启动多个异步任务并行执行,用asyncio.gather打包即可:

import asyncio

async def mainMenuCLI():
  print("This is the CLI")
  # 业务逻辑

async def other_async_task():
  # 其他需要并行的异步任务
  pass

async def main():
  await asyncio.gather(
    mainMenuCLI(),
    other_async_task()
  )

if __name__ == "__main__":
  asyncio.run(main())

2. 搭配discord.py等已有异步框架的场景

discord.py启动时会自行创建事件循环,不要重复调用asyncio.run避免冲突,直接将你的异步函数挂载到框架自带的事件循环即可:

import discord
from discord.ext import commands

# 初始化bot
bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

async def mainMenuCLI():
  print("This is the CLI")
  # 你的async_input等异步逻辑

@bot.event
async def on_ready():
  print(f"机器人已登录:{bot.user}")
  # 将异步任务挂载到bot的事件循环中,资源由框架统一调度
  bot.loop.create_task(mainMenuCLI())

# 启动bot
bot.run("你的机器人token")

资源控制注意事项

对应你担心的资源占用问题,做简单处理即可避免超额占用:

  • 单次执行的异步任务执行完成后会自动被事件循环回收,无需额外处理
  • 如果是长驻循环类任务,添加异常捕获和适当休眠避免空转占满CPU:
    async def mainMenuCLI():
      while True:
        try:
          user_input = await async_input("请输入指令:")
          # 处理输入逻辑
        except Exception as e:
          print(f"执行出错:{e}")
        # 加短时间休眠避免空转
        await asyncio.sleep(0.1)
    
  • asyncio自带任务调度逻辑,只要不无限创建无意义的重复任务,不会超出任务数上限。

内容的提问来源于stack exchange,提问作者Asylum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 11:54:04