【问题标题】:Why am I not able to use a global variable from Flask program to another python file?为什么我不能将 Flask 程序中的全局变量用于另一个 python 文件?
【发布时间】:2021-05-05 12:31:15
【问题描述】:

我正在尝试在另一个 file2 中使用来自 file1 的字典,但在 file2 中它会打印空字典。能否请教一下原因,先谢谢了。

以下是我的文件1:

from flask import Flask, render_template, request
global user_pincode
user_pincode={}
app = Flask(__name__)

@app.route('/', methods=["GET", "POST"])
def index():
       global user_pincode
       #user_pincode getting updated here

@app.route('/delete', methods=["GET", "POST"])
def delete():
       global user_pincode
       #user_pincode getting updated here

if __name__ == "__main__":
    app.run(debug=True)

以下是我的文件2:

import file1
print(file1.user_pincode)

【问题讨论】:

  • 什么时候运行file2?同时?在不同的时间?
  • 导入文件时,python 正在导入源文件,在这种情况下 user_pincode 设置为 {}。如果您想在两个正在运行的程序之间交换数据,请考虑将 user_pincode 写入文件。烧瓶应用程序写入更新的数据,“file2”读取它。

标签: python python-3.x dictionary flask web-deployment


【解决方案1】:

你做了import file1

这就是为什么file1.user_pincode 等于{}

但是你没有调用任何可以改变值的函数。

看看吧。

A.让我们在file1中修改函数delete

@app.route('/delete', methods=["GET", "POST"])
def delete():
    #    global user_pincode 
       user_pincode['key'] = 'delete'

B.修改调用者模块main.py

import file1
print(file1.user_pincode)
file1.delete()
print(file1.user_pincode)

C.运行它:

python main.py 
{}
{'key': 'delete'}

一切如预期。

请注意,dict 在任何地方都不需要global

【讨论】:

  • 嗨,函数“index()”和“delete()”是使用网站触发的,因为它从那里获取输入并更新“user_pincode”。如果我在 file2 中触发这些函数,该函数中的代码将再次运行,但不会得到任何输入。
  • 顺序如下: 1. 我运行 file1,打开我的网站并提供一些输入。这些输入用于更新字典“user_pincode”。 2. 然后我运行 file2,以利用更新的字典进行进一步处理。除了将数据写入文本文件或数据库之外,还有其他选择吗?喜欢只使用 python 数据类型?
  • @vandit_left_join 2. Then I run file2 - 这是否意味着您运行另一个进程python file2
  • 是的,正确!这是 Flask 不支持的东西,还是我应该避免这种情况?
  • @vandit_left_join python 本身不支持它。您在其中一个执行 Web 应用程序中运行 2 个独立的 Python 进程,而在另一个中您尝试查看其他进程的内存
【解决方案2】:

我认为这是一个编译时/运行时问题。

全局变量在编译时被初始化为空字典。您的 file2 在编译时进行评估,因此它会打印一个空字典。

你的用例是什么?如果您希望在单个请求中保留一个值,您可能必须将其存储在某个文件或数据库中。

【讨论】:

  • 嘿,我想你已经很接近回答我的问题了,顺序如下: 1. 我运行 file1,打开我的网站并提供一些输入。这些输入用于更新字典“user_pincode”。 2. 然后我运行 file2,以利用更新的字典进行进一步处理。除了将数据写入文本文件或数据库之外,还有其他选择吗?喜欢只使用 python 数据类型?
  • 您好,从您写的内容来看,我建议使用像simplekv 这样的键值存储。如果您不喜欢使用纯文件系统,则需要安装 memcached 以使其正常工作。
猜你喜欢
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多