aiogram 3 on_startup
Есть функция:
async def reg_reading():
"""Опрос регистров ПР"""
await asyncio.sleep(3)
_logger.info('### Старт чтения регистров...')
client.connect()
res = client.read_holding_registers(16384, 1)
if not res.isError():
variables.switches = list(convert_to_bin(res.registers[0], 11))
while True:
try:
res = client.read_holding_registers(16385, 2)
if res.isError():
_logger.info('### Ошибка чтения регистров')
else:
data = convert_to_bin(res.registers[0], 11)
variables.feedback = convert_to_bin(res.registers[1], 10)
check_values(data=data)
except ConnectionException:
_logger.info('### Нет соединения.')
await asyncio.sleep(2)
и есть бот на aiogram:
async def on_startup():
asyncio.create_task(reg_reading())
async def main():
# Логирование
logging.basicConfig(level=logging.INFO)
# База данных
create_db()
user_parser()
# Бот, диспетчер, роутеры
bot = Bot(token=TOKEN)
dp = Dispatcher()
dp.startup.register(on_startup)
dp.include_router(verify_handler.router)
dp.include_router(info_handler.router)
dp.include_router(light_ctrl_handler.router)
# Запуск
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
Так все работает, но Pycharm ругается, что в функции on_startup перед asyncio должно быть await. Но тогда перестает работать поллинг. И если сделать просто
async def on_startup():
await reg_reading()
То поллинг тоже не запускается
Ответы (1 шт):
Автор решения: Zailox
→ Ссылка
Pycharm не очень умный, просто у него встроенная функция предупреждать, если используется функция, связанная с asyncio, можешь просто отключить предупреждения.
- Может повлиять "if __name.....", т.к. строенной в питон возможности запуска main нету, это аналог.