繁体   English   中英

使用Bottle.py服务器进行线程化

[英]Threading with Bottle.py Server

我遇到了线程问题,无论如何我都无法解决。 我也在StackOverflow中进行了搜索,但是我只能找到不适用于我的情况或我不理解的解释。

我正在尝试使用BottlePy构建应用程序,而我想要的功能之一需要一个在后台运行的功能。 为此,我试图使其在线程中运行。 但是,当我启动线程时,它将运行两次

我已经在某些地方阅读过,可以使用if __name__ == '__main__':来检查函数是在主脚本中还是在模块中,但是我无法执行此操作,因为__name__总是返回模块的名称。

下面是我现在正在做的一个例子。

主要脚本:

# main.py
from MyClass import *
from bottle import *

arg = something

myObject = Myclass(arg1)

app = Bottle()
app.run('''bottle args''')

班级:

# MyClass.py
import threading
import time

class MyClass:
    def check_list(self, theList, arg1):
        a_list = something()
        time.sleep(5)
        self.check_list(a_list, arg1)

    def __init__(self, arg1):
        if __name__ == '__main__':
            self.a_list = arg.returnAList()
            t = threading.Thread(target=self.check_list, args=(a_list, arg1))

所以我在这里打算让check_list一直在线程中运行,做一些事情并等待几秒钟再次运行。 所有这些使我可以更新列表,并能够使用主脚本读取它。

您能告诉我我做错了什么,为什么线程运行两次,如何避免这种情况?

这工作正常:

import threading
import time

class MyClass:
    def check_list(self, theList, arg1):
        keep_going=True
        while keep_going:
            print("check list")
            #do stuff
            time.sleep(1)

    def __init__(self, arg1):
        self.a_list = ["1","2"]
        t = threading.Thread(target=self.check_list, args=(self.a_list, arg1))
        t.start()

myObject = MyClass("something")

由于用户Weeble的评论,找出了问题所在。 当他说“某事导致您的main.py运行两次”时,我记得Bottle带有一个称为“ reloader”的参数。 设置为True时这将使应用程序加载两次 ,因此线程创建也将运行两次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM