Redian新闻
>
Python 可不可以一次读数据给一个 web service 后,然后一直用这个数据
avatar
Python 可不可以一次读数据给一个 web service 后,然后一直用这个数据# Programming - 葵花宝典
p*1
1
做了一个web service, 主要是算一些数。用的是webpy 的get:
urls = ('/calculate','calculate')
app = web.application(urls,globals())
class calculate :
def __init__(self):
self.hello = "hello world"
def GET(self):
getInput=web.input

b=[]
with open("file.txt","rb") as k:
for row in k:
row=row.split("t")
if len(row)==8:
b.append(row)

就是先用getinput 得到一个值,然后再读入一个数据, file.txt, 用 file.txt 的数
据和 getinput 的值做计算。由于,每次call web service 就 vall 一组值,再读数
据,再计算,上司觉得这样做每次input 数据,太耗时,他的意思是能不能把数据一次
读入,放在一边,每次call web service 的时候,哪怕有新的 getinput data 来,都
用存好的从 file.txt 来的数据,而不用再重新读入,这样可以减少i/o所用的时间。
我觉得好像不行。
他给我看这个网页:
http://www.tutorialspoint.com/python/python_classes_objects.htm
意思是用 class, instance 总是可以的。
大家觉得可行吗?
avatar
p*1
2
如果真像他说的可以那样,又该怎么实现呢?程序上?

【在 p******1 的大作中提到】
: 做了一个web service, 主要是算一些数。用的是webpy 的get:
: urls = ('/calculate','calculate')
: app = web.application(urls,globals())
: class calculate :
: def __init__(self):
: self.hello = "hello world"
: def GET(self):
: getInput=web.input
:
: b=[]

avatar
d*n
3
不用db的web app都是耍流氓

【在 p******1 的大作中提到】
: 做了一个web service, 主要是算一些数。用的是webpy 的get:
: urls = ('/calculate','calculate')
: app = web.application(urls,globals())
: class calculate :
: def __init__(self):
: self.hello = "hello world"
: def GET(self):
: getInput=web.input
:
: b=[]

avatar
w*g
4
把读数据那部分放到__init__里不就行了。

【在 p******1 的大作中提到】
: 做了一个web service, 主要是算一些数。用的是webpy 的get:
: urls = ('/calculate','calculate')
: app = web.application(urls,globals())
: class calculate :
: def __init__(self):
: self.hello = "hello world"
: def GET(self):
: getInput=web.input
:
: b=[]

avatar
p*1
5
多谢。我试试。要写成一个函数,class , instance 之类的吗?我都不知道我在说啥。

【在 w***g 的大作中提到】
: 把读数据那部分放到__init__里不就行了。
avatar
w*g
7
我弄错了。查了下,webpy为每一个request instantiate一个object。
放到class里有点杀鸡用牛刀。最方便的办法是在定义class之前读入数据,
存到全局变量里。

啥。

【在 p******1 的大作中提到】
: 多谢。我试试。要写成一个函数,class , instance 之类的吗?我都不知道我在说啥。
avatar
p*1
8
http://stackoverflow.com/questions/16510254/public-variables-in
这篇文章的意思是说 python 没有全局变量。不过你的意思我懂了。
我有一个问题,既然是每一个request instantiate一个object,那么是不是我先要run
一个单独的程序,读入数据,存到class 里之类的, 再run web service ,是这样吗
? 多谢.

【在 w***g 的大作中提到】
: 我弄错了。查了下,webpy为每一个request instantiate一个object。
: 放到class里有点杀鸡用牛刀。最方便的办法是在定义class之前读入数据,
: 存到全局变量里。
:
: 啥。

avatar
l*m
9
what you need is a singleton

run

【在 p******1 的大作中提到】
: http://stackoverflow.com/questions/16510254/public-variables-in
: 这篇文章的意思是说 python 没有全局变量。不过你的意思我懂了。
: 我有一个问题,既然是每一个request instantiate一个object,那么是不是我先要run
: 一个单独的程序,读入数据,存到class 里之类的, 再run web service ,是这样吗
: ? 多谢.

avatar
w*g
10
不用。直接在class前面给变量赋值就可以。不在class内部的代码在.py文件载入的时
候运行。
b=[]
with open("file.txt","rb") as k:
for row in k:
row=row.split("t")
if len(row)==8:
b.append(row)
class calculate :
def __init__(self):
self.hello = "hello world"
def GET(self):
getInput=web.input

run

【在 p******1 的大作中提到】
: http://stackoverflow.com/questions/16510254/public-variables-in
: 这篇文章的意思是说 python 没有全局变量。不过你的意思我懂了。
: 我有一个问题,既然是每一个request instantiate一个object,那么是不是我先要run
: 一个单独的程序,读入数据,存到class 里之类的, 再run web service ,是这样吗
: ? 多谢.

avatar
p*1
11
多谢。那么这样,下一次call web service 就不用再读一遍数据了吗?主要想去掉每
一次读入数据用的时间。

【在 w***g 的大作中提到】
: 不用。直接在class前面给变量赋值就可以。不在class内部的代码在.py文件载入的时
: 候运行。
: b=[]
: with open("file.txt","rb") as k:
: for row in k:
: row=row.split("t")
: if len(row)==8:
: b.append(row)
: class calculate :
: def __init__(self):

avatar
p*1
12
多谢,singleton 就是一个单独变量吗?是什么?

【在 l*******m 的大作中提到】
: what you need is a singleton
:
: run

avatar
p*1
13
我看了一下 singleton ,好像是一种 class, 它可以储存数据?
http://stackoverflow.com/questions/31875/is-there-a-simple-eleg
要另外写一个python script 包括一个singleton, 把数据写进去。再另外运行 web
service 吗?
多谢!

【在 l*******m 的大作中提到】
: what you need is a singleton
:
: run

avatar
p*1
14
多谢楼上几位的回复。我去试一下。
avatar
c*n
15
看来我已经是老流氓了。。

【在 d****n 的大作中提到】
: 不用db的web app都是耍流氓
avatar
p*1
16
多谢,按照你的意思改了下代码。发现没有提高运行速度。
感觉问题主要出在那句话上:
webpy为每一个request instantiate一个object

【在 w***g 的大作中提到】
: 不用。直接在class前面给变量赋值就可以。不在class内部的代码在.py文件载入的时
: 候运行。
: b=[]
: with open("file.txt","rb") as k:
: for row in k:
: row=row.split("t")
: if len(row)==8:
: b.append(row)
: class calculate :
: def __init__(self):

avatar
p*1
17
多谢。怎么用db?用db 是不是快点?代码?

【在 d****n 的大作中提到】
: 不用db的web app都是耍流氓
avatar
p*1
18
今天试了一下我的这个想法,发现,完全不行。class 是不可以存储数据的。我先写了
一个 python script class, 给一个变量赋了值,把这个程序跑了一下,然后写了另
一个程序,调用统一名字的class instance ,发现根本不识别。就是说每一个python
scripts 之间是隔离开的,根本不能互相存储变量,调用。自己有点蠢。呵呵。

【在 p******1 的大作中提到】
: 我看了一下 singleton ,好像是一种 class, 它可以储存数据?
: http://stackoverflow.com/questions/31875/is-there-a-simple-eleg
: 要另外写一个python script 包括一个singleton, 把数据写进去。再另外运行 web
: service 吗?
: 多谢!

avatar
p*1
19
大家对此问题有何见解?多谢!
avatar
p*1
20
我现在还又那个singleton 的方法没试,大家说该怎么用singleton 在这里?多谢!
avatar
c*t
21
wdong 的回复是正确的。 你可能没有搞懂人家的意思吧。
跟本就不需要singleton。
avatar
w*g
22
他试了,说速度不快。但是速度不快这个说法太抽象,一个请求花几秒,
每秒能处理多少请求都没说,那个文件有多大也没说,计算是啥我似乎也
没看明白。导致速度慢的原因太多了。无从帮起。我怀疑读那个文件根本
不是bottleneck。

【在 c***t 的大作中提到】
: wdong 的回复是正确的。 你可能没有搞懂人家的意思吧。
: 跟本就不需要singleton。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。