Многопроцессорная обработка в Django Функция с ZIP

Возможно ли в Django использовать многократную обработку запроса.

Итак, если я пошлю запрос на http://127.0.0.1:8000/wallet_verify

def wallet_verify(request):
    walelts = botactive.objects.all()

# здесь я проверяю, хочет ли пользователь быть включенным в процесс или нет, поэтому если он установит значение True, то я включу его, в противном случае игнорирую.

    for active in walelts:
        check_active = active.active
        if check_active == True:
            user_is_active = active.user

# для тех, кто хочет быть включенным, я затем получаю их ключевые данные. Мне нужно получить и api, и секрет, так что затем я прохожу цикл, чтобы получить данные от активных пользователей.

            database = Bybitapidatas.objects.filter(user=user_is_active)
            for apikey in database:
                apikey = apikey.apikey
            for apisecret in database:
                apisecret = apisecret.apisecret

# поскольку я делаю запрос к конечной точке обмена, я могу включить только один API и секрет за один раз. Так что для 1 человека за раз, вот почему я хочу работать параллельно.

            for a, b in zip(list(Bybitapidatas.objects.filter(user=user_is_active).values("apikey")), list(Bybitapidatas.objects.filter(user=user_is_active).values("apisecret"))):
                session =spot.HTTP(endpoint='https://api-testnet.bybit.com/', api_key=a['apikey'], api_secret=b['apisecret'])

здесь я проверяю, есть ли у них баланс для открытия сделок, если они выбрали быть включенными.

                GET_USDT_BALANCE = session.get_wallet_balance()['result']['balances']
                for i in GET_USDT_BALANCE:
                    if 'USDT' in i.values():
                        GET_USDT_BALANCE = session.get_wallet_balance()['result']['balances']
                        idx_USDT = GET_USDT_BALANCE.index(i)
                        GET_USDTBALANCE = session.get_wallet_balance()['result']['balances'][idx_USDT]['free']
                        print(round(float(GET_USDTBALANCE),2))

# если у них недостаточно баланса, я пропускаю пользователя.

                if round(float(GET_USDTBALANCE),2) < 11 :
                    pass 
                else:
                
                    session.place_active_order(
                        symbol="BTCUSDT",
                        side="Buy",
                        type="MARKET",
                        qty=10,
                        timeInForce="GTC"
                    )

Как я могу запустить этот процесс параллельно с циклом через базу данных, чтобы также получить данные для каждого отдельного пользователя.

Я все еще новичок в кодировании, поэтому надеюсь, что я объяснил, что это имеет смысл.

Я пробовал мультипроцессирование и пулы, но затем я получаю сообщение, что приложение еще не запущено и я должен запустить его вне wallet_verify есть ли способ сделать это в wallet_verify

и когда я посылаю Post Request.

Любая помощь приветствуется.

Фильтрация базы данных для получения пользователей, установивших значение True Listi - [1,3] (это идентификаторы пользователей Возвращено

)
processess = botactive.objects.filter(active=True).values_list('user')
listi = [row[0] for row in processess] 

Получить пользователя из списка и выполнить действие.

def wallet_verify(listi):
    # print(listi)
    database = Bybitapidatas.objects.filter(user = listi)
    print("---------------------------------------------------- START")
    for apikey in database:
        apikey = apikey.apikey
        print(apikey)
    for apisecret in database:
        apisecret = apisecret.apisecret
        print(apisecret)
        start_time = time.time()

        session =spot.HTTP(endpoint='https://api-testnet.bybit.com/', api_key=apikey, api_secret=apisecret)

    GET_USDT_BALANCE = session.get_wallet_balance()['result']['balances']
    for i in GET_USDT_BALANCE:
        if 'USDT' in i.values():
            GET_USDT_BALANCE = session.get_wallet_balance()['result']['balances']
            idx_USDT = GET_USDT_BALANCE.index(i)
            GET_USDTBALANCE = session.get_wallet_balance()['result']['balances'][idx_USDT]['free']
            print(round(float(GET_USDTBALANCE),2))

    if round(float(GET_USDTBALANCE),2) < 11 :
        pass 
    else:
    
        session.place_active_order(
            symbol="BTCUSDT",
            side="Buy",
            type="MARKET",
            qty=10,
            timeInForce="GTC"
        )
    print ("My program took", time.time() - start_time, "to run")
    print("---------------------------------------------------- END")
    return HttpResponse("Wallets verified")

Verifyt - это то, что я использую для мультипроцессинга, поскольку я не хочу, чтобы он запускался без запроса. также инициализатор запускает приложения для каждого цикла

def verifyt(request):
    with ProcessPoolExecutor(max_workers=4, initializer=django.setup) as executor:
        results = executor.map(wallet_verify, listi)
    return HttpResponse("done")
    ```
Вернуться на верх