我正在使用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()调度程序对象。
添加回答
举报
0/150
提交
取消