Django函数中的多处理



是否可以在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")
```

相关内容

  • 没有找到相关文章

最新更新