Google App Engine上的Async POST python请求

时间:2015-10-28 09:04:39

标签: python google-app-engine request

我正在使用Google App Engine上的python项目,我正在使用Parse发送推送通知。 Eyerything工作正常但我注意到当我必须向Parse服务器发送POST休息请求的不同设备发送多个通知时会出现一些延迟。

更清楚:

我有一个包含N个元素的循环,对于我必须发送推送通知的每个元素,因此我必须向Parse发出POST请求,并且每个连接(当然)需要大约300毫秒才能完成,所以它是相当的慢完成整个循环。

我认为应该更好地更改异步请求中的请求但是在搜索文档和Google之后我发现没有明确的示例如何使用urllib2urlfetch以及如何使用Parse 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)

但是我找不到添加标题的例子。有什么建议吗? 谢谢!

1 个答案:

答案 0 :(得分:5)

     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