from asgiref.sync import async_to_sync from django.apps import AppConfig import asyncio import threading import queue import time class TgBotClass(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "tgbot" is_run = False app = None update_queue = None my_queue = queue.Queue() # @async_to_sync async def init_bot(self): from django.conf import settings from .tgbot import TgBotApp tgbot = TgBotApp() app = await tgbot.init_tg() await tgbot.set_webhook(f"https://{settings.TGBOT['base_url']}/api/tgbot/") return app async def some_function(self=None): print('updater') while True: if not TgBotClass.my_queue.empty(): item = TgBotClass.my_queue.get() await TgBotClass.app.process_update(item) TgBotClass.my_queue.task_done() time.sleep(3) async def some_callback(): await TgBotClass.some_function() def between_callback(): loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.run_until_complete(TgBotClass.some_callback()) loop.close() def ready(self): import os if os.environ.get("RUN_MAIN", None) != "true": return if TgBotClass.is_run: return TgBotClass.is_run = True TgBotClass.app = async_to_sync(self.init_bot, force_new_loop=True)() thread = threading.Thread(target=TgBotClass.between_callback) thread.setDaemon(True) thread.start() print(TgBotClass.my_queue)