Многопроцессорная обработка в 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")
```