我花了很长时间才弄明白问题是什么,现在我不知道如何解决它。
我正在使用pythonanywhere来运行我的web.py服务器
所以这就是问题所在。 web.py实例不会停止在服务器请求之间运行。 让我展示一下因此而产生的影响。
我有一个列表,在 list.append(number)的循环中填充 因此,在第一次请求服务器时,脚本运行正常。 list =(1,2,3)
但是,由于web.py实例未停止,因此对服务器的第二个请求列表最终为(1,2,3,1,2,3)< / strong>,我的脚本不起作用。
我如何知道web.py不会在请求之间停止运行?当我在脚本生命周期结束时删除每个命名空间时,对服务器的第二个请求返回错误,指出“ web 未定义”
类web_serve:
def GET(self):
data_obj = volumePit_google()
plotter = volumePit_plot()
data_obj.download('SPY', 2)
data_obj.organize()
price, volume = zip(*data_obj.data_final)
plot_edges = data_obj.plotter_edges
e_test = data_obj.data_ticks
plotter.maxmin(price)
data_obj.plotter_ticks()
for i, tick in enumerate(data_obj.data_ticks[1:]):
edges = [data_obj.data_ticks[i], tick]
volume_edges = [plot_edges[i], plot_edges[i+1]]
day_data = data_obj.data_final[edges[0]:edges[1]]
price, volume = zip(*day_data)
plotter.dividers(volume_edges)
price_position = data_obj.price_action(price, [volume_edges[0], volume_edges[1]])
plotter.subplot.plot(price_position, price, color='g', ls='-', lw='1')
histogram = data_obj.histogram(day_data, 0)
plotter.volume_profile(histogram, volume_edges)
plotter.ticks([data_obj.plotter_edges, data_obj.dates, data_obj.plotter_tick_pos])
data_stream = cStringIO.StringIO()
plt.savefig(data_stream, bbox_inches='tight')
data_stream.seek(0)
return_png = base64.b64encode(data_stream.read())
data_stream.close()
return return_png
需要清算的变量位于 data_obj
内我不知道是否值得一提,但以下两个类都在同一个文件中定义 data_obj = volumePit_google() plotter = volumePit_plot()
class volumePit_google:
data = []
data_final = []
day_volume = []
data_ticks = [] #list contains indexes of the data_final separating days
dates = []
plotter_tick_pos = []
plotter_edges = [0]
def download(self, ticker, period):
答案 0 :(得分:3)
我无法想象为什么你希望服务器在请求之间停止。那将是非常低效的。
您应该避免保留全局/模块级对象。
已编辑现在您已将代码发布到volumePit_google
类,我们可以看到问题所在。 Python中 class 级别定义的任何内容都是类变量,在类的所有成员之间共享。你需要的是实例变量,每次实例化类时都会定义它们:
class volumePit_google(object):
def __init__(self):
self.data = []
self.data_final = []
self.day_volume = []
self.data_ticks = [] #list contains indexes of the data_final separating days
self.dates = []
self.plotter_tick_pos = []
self.plotter_edges = [0]