【发布时间】:2021-05-21 13:17:46
【问题描述】:
我正在尝试在我正在开发的使用 aiogram 的电报机器人中发送加密货币的价格警报。我遇到的问题是我不确定如何将函数作为后台非阻塞线程启动,然后继续启动调度程序。我知道如何使用标准的同步电报机器人来做到这一点,但我对我应该用 aiogram 做什么感到困惑。我读到我可以使用dp.loop.create_taskhere,但这会引发错误Nonetype has no attribute create_task。以下是我尝试执行这些线程的代码:
print('Starting watchlist process, this needs to run as a non blocking daemon...')
dp.loop.create_task(wl.start_process())
print('Starting broadcaster, this needs to run as a non blocking daemon ... ')
dp.loop.create_task(broadcaster())
print('Starting the bot ...')
executor.start_polling(dp, skip_updates=True)
我只需要wl.start_process 和broadcaster 函数在后台运行。我该如何做到这一点?
这是start_process:
async def start_process(self):
"""
Start the watchlist process.
:return:
"""
threading.Thread(target=self.do_schedule).start()
await self.loop_check_watchlist()
这是broadcaster:
async def broadcaster():
count = 0
while True:
uid_alerts = que.__next__()
if uid_alerts:
for i in uid_alerts:
uid = i[0]
alert = i[1]
try:
if await send_message(uid, alert):
count += 1
await asyncio.sleep(.05) # 20 messages per second (Limit: 30 messages per second)
finally:
log.info(f"{count} messages successful sent.")
【问题讨论】:
标签: python-asyncio telegram-bot