【发布时间】:2013-12-12 19:47:15
【问题描述】:
我刚刚构建了我的第一个REST API 服务,但它的行为很奇怪......当这个REST API 被调用时,它会进行一些计算并返回结果。但是,在我的设置中,没有重新启动REST 服务器,只有第一次提交的结果是正确的。自第二次提交以来,结果一直在下降。以前有人遇到过这个问题吗?
主机
all_dic = {"APPRAT":APPRAT, "APPNUM":APPNUM, "APSPAC":APSPAC, "KOC":KOC, "METHAF":METHAF, "WETTED":WETTED,
"METHOD":METHOD, "AIRFLG":AIRFLG, "YLOCEN":YLOCEN, "GRNFLG":GRNFLG, "GRSIZE":GRSIZE,
"ORCFLG":ORCFLG, "INCORP":INCORP, "SOL":SOL, "METHAP":METHAP, "HYDHAP":HYDHAP, "FOTHAP":FOTHAP}
data = json.dumps(all_dic)
url='http://localhost:7777/myroute/'
http_headers = {'Content-Type' : 'application/json'}
response = urlfetch.fetch(url=url, payload=data, method=urlfetch.POST, headers=http_headers)
self.data_a= json.loads(response.content)["ff"]
REST 服务器
from bottle import route, run, post, request
import json
@post('/myroute/')
def myroute():
APPRAT = request.json["APPRAT"]
APPNUM = request.json["APPNUM"]
APSPAC = request.json["APSPAC"]
KOC = request.json["KOC"]
METHAF = request.json["METHAF"]
WETTED = request.json["WETTED"]
METHOD = request.json["METHOD"]
AIRFLG = request.json["AIRFLG"]
YLOCEN = request.json["YLOCEN"]
GRNFLG = request.json["GRNFLG"]
GRSIZE = request.json["GRSIZE"]
ORCFLG = request.json["ORCFLG"]
INCORP = request.json["INCORP"]
SOL = request.json["SOL"]
METHAP = request.json["METHAP"]
HYDHAP = request.json["HYDHAP"]
FOTHAP = request.json["FOTHAP"]
import geneec
ff=geneec.geneec2(APPRAT,APPNUM,APSPAC,KOC,METHAF,WETTED,METHOD,AIRFLG,YLOCEN,GRNFLG,GRSIZE,ORCFLG,INCORP,SOL,METHAP,HYDHAP,FOTHAP)
print all the inputs
print ff
return json.dumps({'ff':ff})
run(host='localhost', port=7777, debug=True)
其中geneec 是使用f2py 编译到Python 模块(geneec.pyd) 中的FORTRAN 程序。我已经在本地纯Python环境中测试过这个mudule,它工作正常(多次提交后结果不会改变。)
那么有人可以就这个问题给我一些建议吗?谢谢!
更新
以下是服务器端打印的结果。我所看到的是相同的一组输入产生不同的输出
{'GRSIZE': 'a', 'APSPAC': '6', 'INCORP': 0, 'ORCFLG': 'a', 'KOC': '2', 'METHAP': '6', 'SOL': '3', 'YLOCEN': '12', 'FOTHAP'
'AIRFLG': 'a', 'APPRAT': '4', 'METHOD': 'a', 'WETTED': 'Yes'}
(576.0662841796875, 530.255615234375, 331.788330078125, 153.9146728515625, 104.5523681640625, 'AERL_A', 8.471641540527344,
127.0.0.1 - - [11/Dec/2013 23:41:43] "POST /myroute/ HTTP/1.1" 200 150
{'GRSIZE': 'a', 'APSPAC': '6', 'INCORP': 0, 'ORCFLG': 'a', 'KOC': '2', 'METHAP': '6', 'SOL': '3', 'YLOCEN': '12', 'FOTHAP'
'AIRFLG': 'a', 'APPRAT': '4', 'METHOD': 'a', 'WETTED': 'Yes'}
(546.4204711914062, 480.0862731933594, 245.5520477294922, 98.00833892822266, 65.50333404541016, 'AERL_A', 8.47164154052734
127.0.0.1 - - [11/Dec/2013 23:41:52] "POST /myroute/ HTTP/1.1" 200 152
{'GRSIZE': 'a', 'APSPAC': '6', 'INCORP': 0, 'ORCFLG': 'a', 'KOC': '2', 'METHAP': '6', 'SOL': '3', 'YLOCEN': '12', 'FOTHAP'
'AIRFLG': 'a', 'APPRAT': '4', 'METHOD': 'a', 'WETTED': 'Yes'}
(535.4012451171875, 458.6314392089844, 213.1800079345703, 81.3574447631836, 54.282127380371094, 'AERL_A', 8.47164154052734
127.0.0.1 - - [11/Dec/2013 23:41:58] "POST /myroute/ HTTP/1.1" 200 152
{'GRSIZE': 'a', 'APSPAC': '6', 'INCORP': 0, 'ORCFLG': 'a', 'KOC': '2', 'METHAP': '6', 'SOL': '3', 'YLOCEN': '12', 'FOTHAP'
'AIRFLG': 'a', 'APPRAT': '4', 'METHOD': 'a', 'WETTED': 'Yes'}
(530.4227294921875, 448.1323547363281, 198.46009826660156, 74.41312408447266, 49.63011932373047, 'AERL_A', 8.4716415405273
127.0.0.1 - - [11/Dec/2013 23:42:04] "POST /myroute/ HTTP/1.1" 200 153
【问题讨论】:
-
我不知道您期望什么以及您得到什么...
-
geneec2是做什么的?您是否希望它每次都返回相同的结果?它会修改任何本地或全局状态吗? -
顺便说一句,使用
return {'ff': ff}。无需显式创建 json。 -
另外,你也许可以用一些非常简单的东西代替所有这些分配,比如
geneec2(**request.json) -
@DonQuestion:无论在给定相同输入集的情况下页面刷新多少次,我都希望得到相同的输出。
标签: python rest fortran bottle