Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在view.py文件顶部写入导入与在每个函数中写入导入有什么区别?_Python - Fatal编程技术网

Python 在view.py文件顶部写入导入与在每个函数中写入导入有什么区别?

Python 在view.py文件顶部写入导入与在每个函数中写入导入有什么区别?,python,Python,模块a中的代码: varA=10 class ClassX: def fn1(): return varA api中的代码: from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): import module_a # or from module_a import varA module_a.varA += 1 # or varA+

模块a中的代码:

varA=10

class ClassX:
    def fn1():
        return varA
api中的代码:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    import module_a    # or from module_a import varA
    module_a.varA += 1     # or varA+=1
    return module_a.varA

在开发服务器上运行时,可能有一个进程和一个线程处理所有请求。然而,在生产环境中,由于每个flask端点调用都可能在新进程或新线程中启动,因此,我很想知道是否有什么事情需要注意

例如:它不是进程安全和线程安全的


在函数中导入与在函数外部导入之间也有区别。

在函数内部而不是在顶层导入的原因通常是:

  • 推迟初始导入,例如,因为您很少需要它(因此希望避免在初始启动时导入)。虽然不是很常见,但如果您导入了一些昂贵的错误处理模块,而您并不希望需要这些模块(因为您不希望出现错误),这可能是有意义的

  • 避免循环依赖性问题。如果模块A导入模块B,模块B导入模块A,您可能最终无法导入其中任何一个,因为它们相互依赖。将导入移动到函数中可以避免这种情况


就一般性能和线程而言,这并不重要:只要您第一次(从任何地方)导入模块,它就会添加到
sys.modules
。因此,任何进一步的导入都只会从那里返回条目,而不是再次进行实际导入。

“因为每个flask端点调用都会生成一个新线程”-否。谁告诉过你的?当web服务器收到请求时,它将启动新的线程或进程来处理RequestAllow:@variable:这完全取决于您使用的WSGI容器以及您如何配置它。是的,因此最好以一种在以后可能配置WSGI的任何方式都能正常工作的方式编写代码。不是吗?我只是想谨慎一点。但是由于增量操作,线程/进程的安全性会有问题。因为它在可变的模块上执行。是吗?是的,最好不要和全球人混在一起。