我遇到了线程问题,我无法以任何方式解决这个问题。我也在StackOverflow中搜索过,但我找到的只是不适用于我的案例,或者我不理解的解释。
我正在尝试使用BottlePy构建应用程序,我想要的功能之一需要一个在后台运行的功能。为此,我试图让它在一个线程中运行。但是,当我启动线程时,它会运行两次。
我在某些地方读过可以检查函数是在主脚本中还是在使用if __name__ == '__main__':
的模块中,但是我无法做到这一点,因为{{1总是返回模块的名称。
以下是我现在正在做的一个例子。
主要剧本:
__name__
班级:
# main.py
from MyClass import *
from bottle import *
arg = something
myObject = Myclass(arg1)
app = Bottle()
app.run('''bottle args''')
所以我打算在这里让 check_list 一直在线程中运行,做一些事情并等待几秒钟再次运行。所有这些所以我可以更新列表,并能够使用主脚本阅读它。
你能解释一下我做错了什么,为什么线程运行了两次,我怎么能避免这个?
答案 0 :(得分:1)
这很好用:
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")
答案 1 :(得分:1)
由于用户Weeble的评论,弄清楚出了什么问题。当他说'有什么东西导致你的main.py运行两次'时我记得Bottle有一个名为'reloader'的参数。设置为 True 时,会使应用程序加载两次,因此线程创建也会运行两次。