使用 Bottle.py 服务器的线程

Threading with Bottle.py Server

我遇到了线程问题,我尝试过任何方法都无法解决。我也在Whosebug上搜索过,但我能找到的都是不适合我的案例,或者我不明白的解释。

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

我在某些地方读到可以使用 if __name__ == '__main__': 检查函数是在主脚本中还是在模块中,但是我无法做到这一点,因为 __name__ 总是返回模块的名称。

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

主脚本:

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

arg = something

myObject = Myclass(arg1)

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

class:

# 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 运行一直在一个线程中,做一些事情并等待几秒钟 运行 再次。所有这一切让我可以更新列表,并能够使用主脚本阅读它。

你能给我解释一下我做错了什么吗,为什么线程 运行ning 两次,我怎样才能避免这种情况?

这很好用:

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 的评论,找出问题所在。当他说 'something is causing your main.py to run twice' 时,我记得 Bottle 有一个参数,叫做 'reloader'。当设置为 True 时,这将使应用程序加载两次,因此线程创建也是 运行 两次。