Существует множество разговоров, для которых asyncio является решением. это, но фрагменты кода, которые я вижу в ответах, похоже, не помогают (или я не могу понять, как их применить). См. здесь, здесь, здесь отличные беседы об asyncio. Я совершенно уверен, что если я группирую запросы, это значительно ускорит итерацию. IE отправляет 20 запросов (произвольно), получает 20 ответов, сравнивает результаты, повторяет.
Вот мой неасинхронный код, немного измененный для удобства чтения.
Код: Выделить всё
value_ops = {'name1':['text','ticker1','ticker2','ticker3'],
'name2':['text','ticker1','ticker2','ticker3'],
...
}
# This are the two api GET reqeusts
def pm_check(od_pm,pSide):
#[code cunk here] output is json that I'm grabbing two values from
def ks_check(od_ks,kSide,direction):
#[code cunk here] output is json that I'm grabbing two values from
def opp_check(tradename,ticker1,ticker2,ticker3):
pm_check(ticker1,'asks')
ks_check(ticker2,'yes','buy')
#comparison math code chunk omitted
for value in value_ops.values()
opp_check(*value)
Я думаю, что конечной точкой будет отправка всех запросов API одновременно, сохранение их в таблице, а затем выполнение некоторых вычислений по всей этой таблице. IE в пакете по 20 штук и т. д.
В качестве отправной точки я пробовал:
Код: Выделить всё
value_ops = {'name1':['tradename','ticker1','ticker2','ticker3'],
'name2':['tradename','ticker1','ticker2','ticker3'],
...
}
# This are the two api GET reqeusts
async def pm_check(od_pm,pSide):
#[code cunk here] output is json that I'm grabbing two values from
async def ks_check(od_ks,kSide,direction):
#[code cunk here] output is json that I'm grabbing two values from
async def opp_check(tradename,ticker1,ticker2,ticker3):
pm_check(ticker1,'asks')
ks_check(ticker2,'yes','buy')
#comparison math code chunk omitted
import asyncio
async def process_all():
tasks = []
async for value in value_ops.values():
task = asyncio.create_task(opp_check(*value))
tasks.append(task)
await asyncio.gather(*tasks)
asyncio.run(process_all())
Любые отзывы о том, как ускорить этот процесс, приветствуются. Я также пробовал многопроцессорную обработку, но это не помогло мне ускориться (что, я думаю, имеет смысл, это не проблемы с процессором, а время простоя во время ожидания ответа GET).
Подробнее здесь: https://stackoverflow.com/questions/792 ... cio-python
Мобильная версия