是否可以在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和secret,这样我就可以循环从活动用户那里获得数据。
database = Bybitapidatas.objects.filter(user=user_is_active)
for apikey in database:
apikey = apikey.apikey
for apisecret in database:
apisecret = apisecret.apisecret
#由于我正在向交换端点发出请求,因此一次只能包含一个API和secret。因此,对于一次一个人来说,这就是为什么我想并行运行。
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 中运行吗
以及当我发送邮寄请求时。
感谢您的帮助。
筛选数据库以获取设置为True的用户Listi-[1,3](这些是用户ID返回的
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")
```