Цикл asyncio блокирует http и websocket запросы django

я пытаюсь создать приложение, где мне нужно постоянно слушать postgres notify listen и отправлять эти сообщения через websocket, а также нужен обычный django apis, я могу запустить оба отдельно, но при инициации db listener он начинает блокировать http или websocket запросы


connection = get_db_conn()
connection.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)
cur = connection.cursor()
cur.execute("LISTEN new_item_added;")

async def db_listen():
    print('Started Listening to DB notify ...')
    while True:
        await asyncio.sleep(1)
        data = await queue.get()
        await NotificationConsumer.send_data(data.payload) # class method to send over websocket
        print("message received: ", data.payload)

def listen_callback():
    connection.poll()
    queue.put_nowait(connection.notifies.pop(0))

# calling this function from django app's __init__.py file
def initiate_db_listener():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.add_reader(connection, listen_callback)
    loop.run_until_complete(db_listen())
    

if __name__ == '__main__':
    initiate_db_listener()

я пробовал много вариантов этого, все блокируют основной поток

Вернуться на верх