1

問題が何であるかを理解するのに非常に長い時間がかかりましたが、今ではそれを解決する方法がわかりません。

web.pyサーバーを実行するためにpythonanywhereを使用しています

これが問題です。web.pyインスタンスは、サーバー要求間で実行を停止しません。そのために何が起こっているのかを示しましょう。

list.append(number)を使用してループに入力されるリストがある ため、サーバーへの最初のリクエスト中にスクリプトは正常に実行されます。 リスト=(1、2、3)

ただし、web.pyインスタンスが停止しないため、サーバーリストへの2番目のリクエストで(1、2、3、1、2、3)になり、スクリプトが機能しません。

web.pyがリクエスト間で実行を停止しないことをどうやって知ることができますか?スクリプトの寿命の終わりにすべての名前空間を削除すると、サーバーへの2番目の要求で、「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):
4

1 に答える 1

3

リクエストの合間にサーバーを停止させたい理由が想像できません。それは非常に非効率的です。

グローバル/モジュールレベルのオブジェクトを保持することは避けてください。

編集これで、最終的にコードをvolumePit_googleクラスに投稿しました。問題が何であるかを確認できます。Pythonでクラスレベルで定義されているものはすべてクラス変数であり、クラスのすべてのメンバー間で共有されます。代わりに必要なのは、クラスがインスタンス化されるたびに定義されるインスタンス変数です。

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]
于 2013-01-10T19:40:02.320 に答える