如何在python中安排异步函数?

时间:2020-02-23 19:13:25

标签: python-3.x bots discord python-asyncio discord.py

我正在为不和谐的机器人。基本上是与此问题相同的问题:How can I run an async function using the schedule library?

,但上面的链接中无任何作用。就我而言,我收到“从未等待过我的功能”

async def birthday():        
    channel = client.get_channel(xxxxxx)
    fileName = open("birthdayFile.txt", "r")
    today = time.strftime('%m%d')

    for line in fileName:
            if today in line:
                    line = line.split(' ')

                    line[-1] = line[-1].strip()
                    if line[-1] != line[1]:
                            bdayperson = line[1]+' '+line[2]
                    else:
                            bdayperson = line[1]

                    await channel.send(f"Happy Birthday to "+ bdayperson + "! ??" )


schedule.every().day.at("18:36").do(client.loop.call_soon_threadsafe, birthday)

1 个答案:

答案 0 :(得分:0)

您的生日方法是一种异步方法,也称为协程。这与“普通” /非异步方法不同。

您使用的计划库仅适用于非异步方法。您必须将生日异步方法包装在普通方法中。常规方法可以由您的日程表库调用。

但是,为了使discord.py库起作用,它需要一个运行中的事件循环。但是,计划库是一种阻止方法。它具有自己的内部逻辑,并阻止其他脚本执行。这意味着您不能将调度模块与discord模块一起使用。

您需要找到具有内置asyncio支持的库,或者编写自己的用于调度的逻辑。

您可以通过使用另一个Stackoverflow问题中链接的不同线程来解决阻塞问题:How can I run an async function using the schedule library?
您还没有关注。

通常,这是一个非常棘手的方法,我建议您编写自己的调度逻辑。计划模块不能与discord模块配合使用。