2015-10-28 2 views
2

Я работаю над проектом python в Google App Engine, и я использую Parse для отправки push-уведомлений. Eyerything работает нормально, но я заметил некоторое отставание, когда мне нужно отправить несколько уведомлений на разные устройства, заданные POST запросом на отдых для сервера Parse.Async POST запрос python в Google App Engine

Чтобы яснее:

У меня есть цикл с N элементами, для каждого элемента я должен послать уведомление толчка, и поэтому я должен сделать запрос POST для анализа и каждое соединение (конечно) займет около 300 мс будет завершено, поэтому выполнить полный цикл достаточно медленно.

Я думаю, что должно быть лучше, чтобы изменить запрос в запрос асинхронным, но после поиска по документации и на Google я не нашел четкого пример того, как делать это с urllib2 или urlfetch и как передать заголовки с Разбор Key и Applicaton Id ..

Рабочих (не асинхронный) код

parse_connection = httplib.HTTPSConnection('api.parse.com', 443) 
    parse_connection.connect() 
    parse_app_id = parse_settings.APPLICATION_ID 
    parse_rest_api_key = parse_settings.REST_API_KEY 
    parse_connection.request('POST', '/1/push', 
          json.dumps({ 
           "channels": ["blabla"], 
           "data": { 
            "alert": "A", 
            "title":"B", 
            "badge": "Increment", 
            "category": "C", 
            "sound": "default", 
            "additionalInfos": {"X": "Custom dict"}} 
          }), 
          { 
           "X-Parse-Application-Id": parse_app_id, 
           "X-Parse-REST-API-Key": parse_rest_api_key, 
           "Content-Type": "application/json" 
          }) 
    return json.loads(parse_connection.getresponse().read()) 

Чтобы сделать это асинхронным я думаю, что я должен использовать urlfetch с

rpc = urlfetch.create_rpc() 
    options = json.dumps({"channels": ["blabla"], 
          "data": { 
           "alert": "A", 
           "title": "B", 
           "badge": "Increment", 
           "category": "C", 
           "sound": "default", 
           "additionalInfos": {"X": "Custom dict"}}, 
          }) 
    urlfetch.make_fetch_call(rpc, "https://api.parse.com/1/push:443", options) 

Но я не могу найти примеры, как добавлять заголовок ... любое предложение? Спасибо!

ответ

4
 rpc = urlfetch.create_rpc(deadline=60) 
    url = "https://api.parse.com/1/push:443" 
    request_params = { 
         "channels": ["blabla"], 
         "data": { 
         "alert": "A", 
         "title":"B", 
         "badge": "Increment", 
         "category": "C", 
         "sound": "default", 
         "additionalInfos": {"X": "Custom dict"}} 
         } 
    headers = { 
        "X-Parse-Application-Id": parse_app_id, 
        "X-Parse-REST-API-Key": parse_rest_api_key, 
        "Content-Type": "application/json" 
       } 
    urlfetch.make_fetch_call(rpc, 
           url, 
           payload=json.dumps(request_params), 
           method=urlfetch.POST, 
           headers=headers) 

Вы всегда можете посмотреть в source, если вам нужна дополнительная помощь

+0

, кажется, работает, спасибо! – Nerkyator