У меня есть ситуация, когда вы вызываете несколько запросов в задании планировщика, чтобы проверить статус живого пользователя на 1000 пользователей за раз. Но сервер ограничивает максимум до 50 пользователей в каждом попадании запроса API. Таким образом, используя следующий подход: for
цикл занимает около 66 секунд для 1000 пользователей (т. Е. Для 20 вызовов API).Python Несколько запросов
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
def shcdulerjob():
"""
"""
uidlist = todays_userslist() #Get around 1000 users from table
#-- DIVIDE LIST BY GIVEN SIZE (here 50)
split_list = lambda lst, sz: [lst[i:i+sz] for i in range(0, len(lst), sz)]
idlists = split_list(uidlist, 50) # SERVER MAX LIMIT - 50 ids/request
for idlist in idlists:
apiurl = some_server_url + "&ids="+str(idlist)
resp = requests.get(apiurl)
save_status(resp.json()) #-- Save status to db
if __name__ == "__main__":
sched.add_job(shcdulerjob, 'interval', minutes=10)
sched.start()
Так,
- Есть ли обходной путь, так что она должна оптимизировать время, необходимое для извлечения API?
- Есть ли
Python- APScheduler
какой-либо вариант многопроцессорности для обработки таких запросов api в одном задании?
Позвольте мне попробовать это. Спасибо – Laxmikant