gpt4 book ai didi

python - 在本地运行 python 脚本与从 Django 运行后进行清理

转载 作者:行者123 更新时间:2023-12-01 05:02:32 26 4
gpt4 key购买 nike

编辑:当我在帖子中说“全局变量”时,我指的是 mtcbody 脚本; django 代码不使用全局变量。

我有一个相当神秘的问题;我有一个 python 脚本,它接受一个 XML 文件,解析它并返回某种结果。该脚本有一些用于完成其工作的全局变量。当我在本地运行此脚本时,例如从 Eclipse 中,这些全局变量和其他所有内容都会在最后自动销毁,并且新的运行将使用新资源(如预期)。

但是,当我从 Django View 运行此脚本时,我期望相同的行为,但此脚本会保留全局变量并在每次发出请求时添加到它们。

下面是从 eclipse 本地运行它的示例:

import mtcbody

def doShit():
context = {}
result = mtcbody.getData()

# the variable result['tvas_after'] is one of the global variables in the mtcbody script
print 'TVAs after: ' + str(result['tvas_after'])

return context

if __name__ == '__main__':
doShit()

第一次运行后的结果:

TVAs after: {'1': <mtcbody.TVA instance at 0x7f28011aac20>}

第二次运行后的结果:

TVAs after: {'1': <mtcbody.TVA instance at 0x7f94bbb96c20>}

第三次运行后的结果:

TVAs after: {'1': <mtcbody.TVA instance at 0x7f9509f49c20>}

如您所见,保存 TVA 实例的字典在每次运行期间都会从头开始重新填充;现在将其与从 django View 运行相同脚本时得到的行为进行比较:

def index(request):
context = RequestContext(request)
result = mtcbody.getData()

print 'TVAs after: ' + str(result['tvas_after'])

return render(request, 'dashboardbase/table.html', context)

第一次刷新后的结果(请求)

TVAs after: {'1': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0850fb488>}

第二次刷新后的结果(请求)

TVAs after: {'1': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0850fb488>, '2': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff066e4afc8>}

第三次刷新(请求)后的结果

TVAs after: {'1': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0850fb488>, '3': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0a1fa4ea8>, '2': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff066e4afc8>}

如您所见,脚本中的变量在对 Django View 的调用之间被保留。有人可以解释一下这种行为吗?如果可能的话,如何避免它并使其表现得像在本地运行一样。

谢谢

最佳答案

我不知道为什么你觉得这种行为很难解释。脚本运行一次然后退出,但服务器应用程序是持久的,因此全局数据在该应用程序中持久存在也就不足为奇了。

解决方案应该是显而易见的:不要使用全局变量。它们很少有帮助,除非在您确实希望数据在调用之间保留的奇怪情况下。特别是在服务器环境中,不同的用户可以在不同的时间请求资源,全局变量是危险的。在您的情况下,如果没有看到 mtcbody 中的相关函数,很难提供建议,但似乎您应该在该模块中传递数据,也许通过一个类。

关于python - 在本地运行 python 脚本与从 Django 运行后进行清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com