Как запустить два потока при работе телеграмм бота Python aiogram 3
У меня есть декоратор который при отправке команды remind будет запускать функцию с бесконечным циклом в котором проверяется текущее время и сравнивается с временем из базы данных и если текущее время совпадает с временем из базы данных то бот отправляет фотографии но проблема заключается в том что при запуске функции с проверкой времени весь функционал бота становится недоступен как я понимаю мне нужно запустить эту функцию в отдельном потоке что бы функционал бота во время этой функции стал доступен как мне это сделать ?
Код Диспетчера он является основным файлом и через него запускается бот
import asyncio
import logging
import sys
from Routers.bot_send_photo import hello
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
from token_bot import token
from Routers.add_dell_all_photo import bot_router_photo
from Routers.bot_send_photo import bot_router_send_photo
from Keyboard.keyboard_optional import admin_optional
bot = Bot(token=token)
dp = Dispatcher()
dp.include_routers(bot_router_photo, bot_router_send_photo)
@dp.message(CommandStart())
async def bot_start(message: Message):
await message.answer(text='Привет вот функции для администратора.',
reply_markup=admin_optional)
async def main():
await bot.delete_webhook(drop_pending_updates=True)
await dp.start_polling(bot)
if __name__ == '__main__':
logging.basicConfig(
level=logging.INFO,
stream=sys.stdout,
format="%(asctime)s - [%(levelname)s] - %(name)s - "
"(%(filename)s).%(funcName)s(%(lineno)d) - %(message)s"
)
asyncio.run(main())
Вот код с функцией которую нужно запустить во втором потоке
import sqlite3 as sq
import datetime
from time import sleep
from aiogram import Bot
from aiogram.filters import Command
from aiogram.types import Message
from aiogram import Router
from aiogram.types import BufferedInputFile
from FiltersBot.chat_type import ChatTypeFilter
from FiltersBot.admin_filter import IsAdmin
bot_router_send_photo = Router()
bot_router_send_photo.message.filter(ChatTypeFilter(chat_types=['private']))
lst_admin = [6320259544]
@bot_router_send_photo.message(Command("remind"), IsAdmin(lst_admin))
async def hello(message: Message, bot: Bot):
await message.answer(text='Планировщик запущен.')
with sq.connect('sq_bot.db') as time_photo:
id = -4152120133
cur = time_photo.cursor()
time = cur.execute("""SELECT time FROM data_photo""").fetchall()
photo = cur.execute("""SELECT photo FROM data_photo""").fetchall()
photo_name = cur.execute("""SELECT photo_name FROM data_photo""").fetchall()
while True:
time_now = datetime.datetime.now().time()
time_string = f'{time_now.hour}:{time_now.minute}'
for n, p in zip(photo_name, photo):
for i in range(len(time)):
if time_string in time[i][0]:
await bot.send_photo(chat_id=id,photo=BufferedInputFile(filename=n[0], file=p[0]))
sleep(60)