为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用计划库运行异步功能?

如何使用计划库运行异步功能?

海绵宝宝撒 2021-05-05 19:14:19
我正在使用discord.py rewrite编写一个discord机器人,我想每天在特定时间运行一个函数。我完全没有异步函数的经验,我不知道如何在不使用“等待”的情况下运行一个异步函数。这只是我的代码的一部分,这就是为什么可能未定义某些内容的原因。async def send_channel():    try:        await active_channel.send('daily text here')    except Exception:        active_channel_id = None        active_channel = Noneasync def timer():    while True:        schedule.run_pending()        await asyncio.sleep(3)        schedule.every().day.at("21:57").do(await send_channel())@bot.eventasync def on_ready():    print("Logged in as")    print(bot.user.name)    print(bot.user.id)    print("------")    bot.loop.create_task(timer())使用该schedule.every().day.at("00:00").do()函数时,输入await send_channel()以下参数会出现此错误.do():self.job_func = functools.partial(job_func,* args,** kwargs)TypeError:第一个参数必须是可调用的但是,当我不使用await并将其send_channel()作为参数时,会出现此错误:RuntimeWarning:从未等待协程'send_channel'我不是很擅长编程,所以如果有人可以尝试为我愚弄它,那就太好了。
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

另一个选择是使用apscheduler的AsyncIOScheduler,它与异步功能(例如send_channel)配合使用更为自然。就您而言,您可以简单地编写以下形式的内容:


scheduler = AsyncIOScheduler()

scheduler.add_job(send_channel, trigger=tr)

scheduler.start()

tr触发对象在哪里。您可以使用IntervalTrigger1天的时间间隔和21:57的开始日期,也可以使用CronTrigger。


请注意,在程序结束时,建议调用shutdown()调度程序对象。


查看完整回答
反对 回复 2021-05-11
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信