Mac下用dev_appserver.py部署Python文件遇YAMLError求助
解决dev_appserver.py部署时的EventListenerYAMLError问题
首先得明确:这个报错提示的是YAML语法错误,但你贴出来的是Python代码,说明问题出在你的app.yaml配置文件里,而不是serial_lambda.py本身。dev_appserver.py启动Google App Engine项目时会优先读取app.yaml,当这个文件的YAML语法不符合规范时(比如冒号后没加空格、缩进错误),就会抛出这个定位到行和列的错误。
第一步:修复app.yaml的语法问题
找到你的app.yaml文件,定位到第8行第17列的位置,常见的错误原因包括:
- 键值对的冒号后面没有加空格,比如写成
key:value,正确格式应该是key: value - 缩进使用了制表符(Tab),YAML要求必须用空格缩进
- 嵌套结构的缩进层级不匹配
给你一个适合Python 2.7 GAE项目的标准app.yaml示例,你可以参考调整:
runtime: python27 api_version: 1 threadsafe: true handlers: - url: /.* script: serial_lambda.app
第二步:调整Python代码以适配GAE要求
你的代码目前是一个普通的脚本,而GAE需要一个WSGI应用对象来处理请求,同时还有几个小问题需要修正:
#!/usr/bin/env python import time import httplib import webapp2 runs = 5 count = 100 def serial_run(): # 补充实际的目标主机地址,之前这里是空的 target_host = "your-api-host.com" for x in range(0, runs): try: c = httplib.HTTPSConnection(target_host) json_payload = '{ "key1": ' + str(count) + '}' # 添加Content-Type头,确保服务器能识别JSON格式 headers = {"Content-Type": "application/json"} c.request("POST", "/deploy", json_payload, headers) response = c.getresponse() data = response.read() print(data) except IOError as e: # Python 2.7推荐的异常捕获写法,替换旧的,语法 print('Failed to connect to "%s": %s' % (target_host, str(e))) class MainHandler(webapp2.RequestHandler): def get(self): start = time.time() serial_run() elapsed_time = time.time() - start self.response.write("Elapsed Time: %s seconds" % elapsed_time) # 创建GAE需要的WSGI应用对象 app = webapp2.WSGIApplication([ ('/', MainHandler), ], debug=True)
第三步:验证部署
修改完成后,重新运行dev_appserver.py命令,比如:
dev_appserver.py ./
访问http://localhost:8080就能触发你的串行请求逻辑了。
内容的提问来源于stack exchange,提问作者Titiano
相关产品推荐
相关产品推荐

