在web.py中打开和关闭文件的位置

时间:2018-03-09 10:09:40

标签: python python-3.x web.py

当我终止程序并意识到它从未正确关闭时,数据文件已损坏。

它不会被破坏是非常关键的。所以我添加了一个声明来关闭文件。

现在,似乎文件被打开两次然后关闭。这是一个太多的操作。当然中间有许多读写操作,但它应该只打开和关闭文件一次。

以下是我对标准web.py模板所做的工作:

try

现在,如果我在底部的store语句中移动打开商店的行,它会抱怨,因为它编译了类但我找不到变量store

我尝试在顶部初始化None global,但它也无效。然后我尝试将该行放在函数的顶部并从底部调用它,然而,这并未将其纳入范围。

我正在考虑将它变成一个 let data = [ { name: 'Name', countries: [ { name: 'Country1', competitions: [ { name: 'Competition1', matches: [ { details: 'details' }, { details: 'details' }, { details: 'details' } ] }, { name: 'Competition2', matches: [{ details: 'details' }] } ] }, { name: 'Country2', competitions: [ { name: 'Competition1', matches: [{ details: 'details' }] }, { name: 'Competition2', matches: [{ details: 'details' }] }, { name: 'Competition3', matches: [{ details: 'details' }, { detals: 'detail' }] } ] } ] }, { name: 'Name2', countries: [ { name: 'Country1', competitions: [ { name: 'Competition1', matches: [{ details: 'details' }, { details: 'details' }] } ] } ] } ]; 变量,它可能会成功,这是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

web.py running twice。正如那里提到的那样,避免使用全局变量,因为它们不能做你认为他们做的事情... app.py运行两次,一次在启动时,第二次在web.appplication(urls, globals())内。如果您在web.applications()调用中设置autoreload=False,则无法将文件加载两次。

另一种解决方案是将store附加到全球可用的web.config

if __name__ == "__main__":
    try:
        web.config.store = pd.HDFStore('data_file.h5')
        app = web.application(urls, globals())
        app.run()
    finally:
        web.config.store.close()

...并在__init__

中引用全局内容
class index:
    def __init__(self):
        self.__df = web.config.store['df']