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

时间:2015-07-07 12:16:07

标签: python multithreading bottle

我遇到了线程问题,我无法以任何方式解决这个问题。我也在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 一直在线程中运行,做一些事情并等待几秒钟再次运行。所有这些所以我可以更新列表,并能够使用主脚本阅读它。

你能解释一下我做错了什么,为什么线程运行了两次,我怎么能避免这个?

2 个答案:

答案 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 时,会使应用程序加载两次,因此线程创建也会运行两次。