Python 是否可以将异步函数作为可调用参数?

Python 是否可以将异步函数作为可调用参数?,python,python-3.x,discord.py,python-asyncio,discord.py-rewrite,Python,Python 3.x,Discord.py,Python Asyncio,Discord.py Rewrite,我正在为我的服务器编写一个音乐机器人,当队列耗尽时,我需要断开(一个协同程序)。因此我使用try:except块来处理这个问题,但是,当使用VoiceClient.play时,是否可以将异步函数作为之后的参数? 仅使用after=function不起作用,会引发未等待的函数,但使用after=wait function显示 TypeError:object函数不能用在'wait'表达式中 有没有办法从播放中调用异步函数?如果我不能呼叫协同程序,我将如何断开连接 我的代码: def播放队列(错误)

我正在为我的服务器编写一个音乐机器人,当队列耗尽时,我需要断开(一个协同程序)。因此我使用try:except块来处理这个问题,但是,当使用
VoiceClient.play
时,是否可以将异步函数作为
之后的
参数?
仅使用
after=function
不起作用,会引发未等待的函数,但使用
after=wait function
显示

TypeError:object函数不能用在'wait'表达式中

有没有办法从播放中调用异步函数?如果我不能呼叫协同程序,我将如何断开连接

我的代码:

def播放队列(错误):
如果错误:打印(错误)
#下一首歌
尝试:
play(discord.FFmpegOpusAudio(executable=r“ffmpeg.exe”,source=queue[0]),after=playqueue)
除索引器外:
#如何断开连接?
play(discord.FFmpegOpusAudio(executable=r“ffmpeg.exe”,source=tfname),after=playqueue)
我想做的是:

异步def播放队列(错误):
如果错误:打印(错误)
#下一首歌
尝试:
play(discord.FFmpegOpusAudio(executable=r“ffmpeg.exe”,source=queue[0]),after=playqueue#以某种方式调用异步函数)
除索引器外:
等待断开#我有一个断开功能
play(discord.FFmpegOpusAudio(executable=r“ffmpeg.exe”,source=tfname),after=playqueue#以某种方式调用异步函数)

您可以定义一个回调函数,该函数将计划在事件循环上运行一个协同程序,将其包装成一个
partial
并将其传递给
play
方法

from functools import partial

def _handle_error(loop, error):
    asyncio.run_coroutine_threadsafe(playqueue(error), loop) # playqueue should be an async function
    
vcc.play(discord.FFmpegOpusAudio(executable=r"ffmpeg.exe", source=tfname), after=partial(_handle_error, vcc.loop)) # vcc.loop is your event loop instance

我不明白如何调用
playqueue
,您能发送更多(全部?)代码吗音频源完成/出错后调用