@tree.command(name = "example_command", description = "Example")
async def example_command(interaction):
await interaction.response.defer()
try:
file = test_function() # Takes a couple of seconds to run
d_file = discord.File('nba_ev.png')
await interaction.followup.send(file=d_file)
except Exception as e:
print(f"An error occurred: {e}")
error_message = "An error occurred while processing your request. Please try again."
await interaction.followup.send(content=error_message, ephemeral=True)
字符串
我在python example_command
中有一个discord斜杠命令,它调用了一个需要几秒钟运行的函数test_function()
。
问题是,当另一个用户尝试使用example_command
或不同的斜杠命令,但test_function
仍在运行时,我得到一个错误“应用程序没有响应”,我认为这是因为await interaction.response.defer()
没有在3秒内被调用,因为上一次调用的test_function
仍在运行
我如何才能阻止这种情况发生?我目前正在托管此GCP计算引擎
1条答案
按热度按时间hec6srdp1#
出现这个问题是因为你的
test_function()
函数是完全同步的。这样,你机器的处理器进入这个函数后,只有在完全完成的时候才会离开,导致无法并行执行其他命令。要解决这个问题,可以尝试实现线程或将同步
test_function
函数转换为异步函数。在尝试使其成为异步函数时,您可以首先消除不好的做法,例如将
await asyncio.sleep()
替换为time.sleep()
,并使用aiohttp
代替requests
。不要忘记使用async def
将函数定义为异步。