Перестали работать async func

После того, как смог подключить интерфейс PySide6 к асинхронным функциям возникла новая проблема. Асинхронные функции, вызванные из интерфейса перестали работать. Она как-бы выполняется, но до конкретных действий не доходит

import asyncio
from PySide6.QtCore import QThread, Signal

class AsyncioTaskCreator(QThread):
     finished = Signal(str)

     def __init__(self, task, *args, **kwargs):
         super().__init__()
         self.async_func = task
         self.args = args
         self.kwargs = kwargs
    # self.loop = asyncio.new_event_loop()
    # asyncio.set_event_loop(self.loop)

     def run(self):
         loop = asyncio.new_event_loop()
         asyncio.set_event_loop(loop)
         try:
             loop.run_until_complete(self.async_func(*self.args, **self.kwargs))
         finally:
             loop.close()
         self.finished.emit("Async task completed!")

Самописный класс для активации асинхронных функций внутри интерфейса PySide6. Вызывается следующим образом

self.worker = AsyncioTaskCreator(SteamWorker().create_orders, login = login)
self.worker.start()

В чем обстоит проблема: при вызове функции create_orders она как-бы выполняется вся, однако самая основная строка не выполняется почему-то. Ломаю голову - почему. Однако другие асинхронные функции, вызванные так-же в интерфейсе - работают. Возможно, проблема заключается в том, что другие функции не требуют колосального времени на их исполнение, однако полученные данные в них моментально сохраняются и распределяются в соответствии с кодом. А это функция предназначена для выставление в Steam запросов на покупку с учетом соответствующих критериев.

async def create_orders(self, login: str) -> None:
    async with SteamClientManager(login) as client:
        try:
            row = 0
            created_item = 0
            error_count = 0
            
            db = Database(base_adress_generator(login))
            rows = db.execute("SELECT COUNT(*) FROM orders").fetchone()[0]

            if await client.is_session_alive() is True:
                try:
                    data = db.execute("SELECT * FROM orders").fetchall()
                    for query in data:
                        name = query[0]
                        game = query[1]
                        price = query[2]
                        quantity = query[3]

                        try:
                            if isPurchasing(login, name):
                                await client.place_buy_order(obj=name, app=get_app_id(game), price=price, quantity=quantity)
                                created_item += 1
                                await asyncio.sleep(4)
                            else:
                                continue
                        except Exception as e:
                            error = re.search(r"\d+", str(e))
                            if error:
                                err = int(error.group())
                                if err != 29 and error_count < 6:
                                    error_count += 1
                                    await asyncio.sleep(4)
                                elif err == 29:
                                    await asyncio.sleep(4)
                                else:
                                    break

                        row += 1
                        if row == int(rows):
                            break
                except Exception as e:
                    error = re.search(r"\d+", str(e))
                    if error:
                        err = int(error.group())
                        make_log("warning", f"Market ({login})", f"Ошибка SteamAPI {error}! Ответ: {error_codes_api(error)} (for developer: {e})")
                        await asyncio.sleep(4)
            else:
                raise Exception("Session expired.")
        except Exception as e:
            error_wrapper(e)

SteamClientManager самописный класс тупо для авторизации при помощи менеджера контекста, поэтому там кода, необходимого показать - нет. Код доходит до await client.place_buy_order(obj=name, app=get_app_id(game), price=price, quantity=quantity) и далее проходит, однако никаких действий не происходит. Пытался принудительно выставлять в PySide6 при помощи QThreadPool.globalInstance().setMaxThreadCount(1) не помогает(по дефолту 12). Они запускаются (приложение и сама функция) в разных потоках (проверял через threads) однако все равно ничего не происходит. Напомню интересный факт, строка кода из другой функции

active_listings, to_confirm, buy_orders, count = await client.get_my_listings()

Работает прекрасно и безотказно. То есть при вызове функции, где есть строка указанная выше, соответственно с контекстным менеджером, все работает блестяще.

Есть идеи, почему это не работает?


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