当我终止程序并意识到它从未正确关闭时,数据文件已损坏。
它不会被破坏是非常关键的。所以我添加了一个声明来关闭文件。
现在,似乎文件被打开两次然后关闭。这是一个太多的操作。当然中间有许多读写操作,但它应该只打开和关闭文件一次。
以下是我对标准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' }]
}
]
}
]
}
];
变量,它可能会成功,这是正确的方法吗?
答案 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']