【问题标题】:web.py doesn't delete stop between requestsweb.py 不删除请求之间的停止
【发布时间】:2013-01-10 19:36:52
【问题描述】:

我花了很长时间才弄清楚问题是什么,现在我不知道如何解决。

我正在使用 pythonanywhere 来运行我的 web.py 服务器

所以这就是问题所在。 web.py 实例不会在服务器请求之间停止运行。 让我来演示一下因此发生了什么。

我有一个使用 list.append(number) 循环填充的列表 因此,在对服务器的第一次请求期间,脚本运行良好。 列表 = (1, 2, 3)

但是,由于 web.py 实例并没有停止,所以在对服务器的第二次请求时,list 最终会变为 (1, 2, 3, 1, 2, 3) 我的脚本不起作用。

我如何知道 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() 绘图仪 = 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):

【问题讨论】:

  • 你能展示一些代码示例吗?不清楚你的变量在哪里,所以我不知道该建议什么
  • AFAIK web.py 每次都会创建一个新的请求对象,即 web_serve 的实例变量不应在请求之间存在。但是.. volumePit_google() 返回什么?每次都是新对象还是缓存/全局对象?
  • 是同一个文件中定义的类。

标签: python web.py pythonanywhere


【解决方案1】:

我无法想象您为什么希望服务器在请求之间停止。那将是非常低效的。

您应该简单地避免保留全局/模块级对象。

已编辑 现在您终于将代码发布到volumePit_google 类,我们可以看到问题所在。 Python 中在 class 级别定义的任何内容都是类变量,在类的所有成员之间共享。您需要的是 instance 变量,这些变量在每次实例化类时定义:

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]

【讨论】:

  • 我对python不太熟悉。我该怎么做? del 似乎不起作用
  • 我们应该怎么知道?您已经小心地避免显示任何代码。但我看不出del 有什么帮助:你应该避免在模块级别定义任何东西。
  • 对不起,我不完全理解你在模块级别没有定义任何东西的意思
  • 您也可以使用这种持久性来缓存函数的输出......只是一个想法。
猜你喜欢
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多