【问题标题】:How to create different thread in CherryPy?如何在 CherryPy 中创建不同的线程?
【发布时间】:2014-11-29 15:12:23
【问题描述】:

我是网络开发的新手。第一次使用cherrypy。

import cherrypy
import src.main

class Interface:

    def __init__(self):
        self.mypf = src.main.pf()

    commonhtmlString = """<form method="get" action="generate">
          <input type="text" value="" name="l" />
          <input type="text" value="" name="r" />
          <button type="submit">Give it now!</button>
          </form>"""

    @cherrypy.expose
    def index(self):
        return Interface.commonhtmlString

    @cherrypy.expose
    def generate(self, l, r):
        self.mypf = src.main.pf()
        self.mypf.getLocalityInfo(l, r)
        return Interface.commonhtmlString + self.mypf.printC()

    @cherrypy.expose
    def explore(self, c):
        return Interface.commonhtmlString + self.mypf.printIC(c)

cherrypy.quickstart(Interface())

以上代码运行良好。但是当我打开新浏览器或新标签并更改参数并生成新输出时......它反映在所有打开的链接中并导致错误。

考试。假设我输入 l=x r=xx,得到的结果是 xxx。现在,如果我在另一个选项卡中打开 url 并输入 l=y r=yy,我得到的结果是 yyy。现在发生的事情是上一个选项卡没有持续到 xxx,因此如果我单击 xxx 中的一些链接,它们要么转到 yyy 等效链接,要么导致错误。

有人可以帮忙解决这个问题吗? 您可以解释或提供任何外部链接或概念。准备阅读。 提前致谢。

【问题讨论】:

  • 不清楚你指的是什么链接,pf 做了什么。很可能您没有意识到 Interface 实例只创建一次,它会在请求之间保留数据(并且您需要确保全局数据的线程安全)。如果没有帮助,请使用可运行的代码编辑您的问题。

标签: python thread-safety cherrypy server


【解决方案1】:

从您的代码中很难看出您对提交的数据做了什么。您似乎将提交的值存储在服务器上的变量/数据存储中。该变量只有一个副本,因此用户将覆盖彼此的副本。您可以考虑创建一个小型数据库并存储每个用户的输入(如果您有办法区分用户)。或者您可以将数据存储在用户会话中,并在每次查看/刷新页面时引用它。

http://docs.cherrypy.org/en/latest/pkg/cherrypy.lib.html?highlight=session#module-cherrypy.lib.sessions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多