小编Wil*_*ton的帖子

Python:为什么导入的模块不能引用另一个导入的模块?

main.py:

import subone
import subtwo
Run Code Online (Sandbox Code Playgroud)

subone.py:

a = 'abc'
Run Code Online (Sandbox Code Playgroud)

subtwo.py:

print subone.a
Run Code Online (Sandbox Code Playgroud)

跑步python main.py投掷a NameError: name 'subone' is not defined.我希望它打印'abc'.

重构它以使用from import和类没有帮助:

main.py:

from subone import *   # Only using from X import * for example purposes.
from subtwo import *

print 'from main.py:', a.out
Run Code Online (Sandbox Code Playgroud)

subone.py:

class A:
    out = 'def'

a = A()
Run Code Online (Sandbox Code Playgroud)

subtwo.py:

# This throws NameError: name 'a' is not defined
print a.out

# This throws NameError: name 'A' is not defined …
Run Code Online (Sandbox Code Playgroud)

python import module

10
推荐指数
1
解决办法
9379
查看次数

为什么 CherryPy 对象属性在请求之间保持不变?

我正在为我的 CherryPy 应用程序编写调试方法。有问题的代码(非常)基本上等同于:

import cherrypy

class Page:
    def index(self):
        try:
            self.body += 'okay'
        except AttributeError:
            self.body = 'okay'
        return self.body
    index.exposed = True

cherrypy.quickstart(Page(), config='root.conf')
Run Code Online (Sandbox Code Playgroud)

我很惊讶地注意到,从一个请求到另一个请求,self.body 的输出都在增长。当我从一个客户端访问页面,然后从另一个同时打开的客户端访问页面,然后刷新这两个客户端的浏览器时,输出是不断增加的“okay”字符串。在我的调试方法中,我还记录了特定于用户的信息(即会话数据),并且这些信息也显示在两个用户的输出中。

我假设这是因为 python 模块被加载到工作内存中,而不是为每个请求重新运行。

我的问题是:这是如何工作的?self.debug 是如何从请求到请求保留的,但cherrypy.session 和cherrypy.response 不是?

有没有办法设置一个只用于当前请求的对象属性?我知道我可以根据每个请求覆盖 ​​self.body,但这似乎有点临时。在 CherryPy 中是否有标准或内置的方法?

(第二个问题移到CherryPy 缓存如何工作?

python cherrypy request persistent

4
推荐指数
2
解决办法
1967
查看次数

标签 统计

python ×2

cherrypy ×1

import ×1

module ×1

persistent ×1

request ×1