[英]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.