2015-10-27 3 views
0

Я использую API для выполнения HTTP-запросов, которые возвращают JSON. Вызывающий АФИ, однако, зависит от начала и конца страницы должны быть указаны, например, как это:Асинхронные запросы JSON в Python

def API_request(URL): 
    while(True): 
     try: 
      Response = requests.get(URL) 
      Data = Response.json() 
      return(Data['data']) 
     except Exception as APIError: 
      print(APIError) 
      continue 
     break 
def build_orglist(start_page, end_page): 
    APILink = ("http://sc-api.com/?api_source=live&system=organizations&action=" 
       "all_organizations&source=rsi&start_page={0}&end_page={1}&items_" 
       "per_page=500&sort_method=&sort_direction=ascending&expedite=1&f" 
       "ormat=json".format(start_page, end_page)) 
    return(API_request(APILink)) 

Единственный способ узнать, если вы не дольше на существующей странице, когда JSON будет null, например this.

Если я хотел сделать несколько build_orglist, переходя через каждую страницу асинхронно, пока не дойду до конца (Null JSON), как я могу это сделать?

+1

Взгляните на многопроцессорность Python: http://gouthamanbalaraman.com/blog/python-multiprocessing-as-a-task-queue.html –

+0

@AlexReynolds У меня был быстрый взгляд на многопроцессорность раньше, что действительно меня беспокоит что я просто не могу сделать логику для этого. Раньше я никогда не работал с параллелизмом, и это доказывает, что это немного сложно. Я просто не могу сформулировать логику этого в моей голове большую часть времени. –

+0

theres 'asyncio' в python 3, Tornado: http://www.tornadoweb.org/en/stable/ и другие async libs ... – postelrich

ответ

0

Я пошел с ответом @ LukasGraf на использование сеансов, чтобы объединить все мои HTTP-соединения в один сеанс, а также использовать grequests для одновременного создания группы HTTP-запросов.

Смежные вопросы