使用 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 时,这将使应用程序加载两次,因此线程创建也是 运行 两次。
我遇到了线程问题,我尝试过任何方法都无法解决。我也在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 时,这将使应用程序加载两次,因此线程创建也是 运行 两次。