Google App Engine上的Async POST python请求

Ner*_*tor 2 python google-app-engine request

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

更清楚:

我有一个包含N个元素的循环,我必须发送推送通知的每个元素,因此我必须向Parse发出POST请求,并且每个连接(当然)需要大约300毫秒才能完成,因此完成起来非常慢整个循环.

我认为应该更好地在异步请求中更改请求但是在搜索文档和Google之后我发现没有明确的示例如何使用urllib2或者urlfetch如何使用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())
Run Code Online (Sandbox Code Playgroud)

为了使异步我想我应该用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)
Run Code Online (Sandbox Code Playgroud)

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

par*_*i82 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)
Run Code Online (Sandbox Code Playgroud)

如果您需要更多帮助,可以随时查看来源