Как добавить асинхронные таски в код?

async def main(sticker_dict, orders_dict):
    url = "wss://wsn.dota2.net/wsn/"
    try:
        print("Коннект")
        async with websockets.connect(url, ping_interval=None) as client:
            print("Успешно")
            await client.send("newitems_go")
            # await client.send("PINGPONG")
            await client.ping()

            tasks = []
            while True:
                tasks.append(asyncio.create_task(get_tasks(client, sticker_dict, orders_dict)))
                if len(tasks) == 200:
                    await asyncio.gather(*tasks)
                    tasks = []
    except Exception as drop_connection:
        print(drop_connection)
        print("Соединение упало!")


async def get_tasks(client, sticker_dict, orders_dict):
    raw_data = json.loads(await client.recv())["data"]
    data = eval(raw_data)
    try:
        """
        Тут мы узнаем есть ли у данного предмета стикеры, которые нам нужны.
        И все нужные стикеры добавляем в общий список, для того чтобы потом
        при отправке сообщения указать, какие стикеры есть у данного предмета
        """
        stickers = data["stickers"]

        stickers = stickers.split("|")
        necessary_stickers = []
        for sticker in stickers:
            if sticker in sticker_dict:
                sticker_name = sticker_dict.get(sticker)
                necessary_stickers.append(sticker_name)
        if len(necessary_stickers) > 0:
            if data['i_classid'] not in orders_dict:
                await generate_message(data, orders_dict, necessary_stickers)
            elif orders_dict.get(data['i_classid'])['ui_price'] - int(data['ui_price']) > 50:
                await generate_message(data, orders_dict, necessary_stickers)
    except KeyError:
        pass


async def generate_message(data, orders_dict, stickers):
    orders_dict[data['i_classid']] = data
    item_id = f"{data['i_classid']}-{data['i_instanceid']}"
    for admin_id in ADMINS:
        text_message = [
            "Новый предмет!",
            f"Лот: {data['i_market_hash_name']}",
            f"Цена: {data['ui_price']} {data['ui_currency']}",
            f"Стикеры: {', '.join(stickers)}\n",
            f"Ссылка: https://market.csgo.com/item/"
            f"{data['i_classid']}-{data['i_instanceid']}"
        ]
        purchase_request = f"https://market.csgo.com/api/v2/buy?" \
                           f"key={api_key}&id={data['ui_id']}&price={str(round(data['ui_price'] * 100))}"
        await bot.send_message(admin_id, text="\n".join(text_message),
                               disable_web_page_preview=True,
                               reply_markup=generate_buy_keyboard(item_id, purchase_request))


if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(sticker_dict, orders_dict))

Ошибка:

base_events.py [LINE:1753] #ERROR    [2022-08-22 20:44:10,165]  Future exception was never retrieved
future: <Future finished exception=ConnectionClosedError('code = 1006 (connection closed abnormally [internal]), no reason')>
websockets.exceptions.ConnectionClosedError: code = 1006 (connection closed abnormally [internal]), no reason
cannot call recv while another coroutine is already waiting for the next message

Изначально код был в две функции, но я решил добавить таски, из-за чего мне пришлось добавить функцию get_tasks и перетащить туда код. Но в итоге вылетела эта ошибка.


Ответы (0 шт):