python - 哪种方法最适合在 discord.py 中启动机器人?login() 和 connect() vs start() vs run()
解决方案
相信官方文档说的很清楚了:
start()
是login()
+的简写协程connect()
。run()
是一个阻塞调用,这意味着这个函数必须是最后一个调用的函数,因为它是阻塞的。这意味着事件的注册或在此函数调用之后调用的任何内容在它返回之前不会执行。
没有“最好”的方法。如果您想要同步执行,请选择run()
. start()
(或login()
+ connect()
)更适合异步执行。
示例run()
您run()
不必管理任何事件循环:
try:
loop.run_until_complete(start(*args, **kwargs))
except KeyboardInterrupt:
loop.run_until_complete(logout())
# cancel all tasks lingering
finally:
loop.close()
示例start()
根据文档,start()
是
一个阻塞调用,它从你那里抽象出事件循环初始化。
这意味着您需要放置start()
在一个事件循环中。
from discord.ext import commands
import asyncio
client = commands.Bot(command_prefix = '!')
@client.event
async def on_ready():
print("Ready")
loop = asyncio.get_event_loop()
loop.run_until_complete(client.start('TOKEN'))
推荐阅读
- xcuitest - 如果 XCUITest 中的一项测试失败,如何使相关测试失败?
- c# - 我可以将 foreach 循环内的字典循环转换为 LINQ 语句吗
- javascript - Javascript - 查找字谜的更好解决方案 - 时间复杂度 O (n log n)
- ios - 在执行退出操作时,unwind segue 不会出现在界面构建中
- mysql - 通过 mysql 中的触发器更新已使用积分的奖励状态
- r - 创建只有 1 个 ID 列的宽数据
- javascript - 将 Suspense 与 React Router 一起使用时,Typescript 会引发显式函数返回类型错误
- angular - Angular routerLink 不会触发 ngOnInit
- python-3.x - 如何使用 pandas 将销售数据组织成 12 个月,并找到这 12 个月中最赚钱的 10 种产品?
- pandas - Pandas 0.24.0 用特殊的列标识符破坏了我的 pandas 数据框