簡體   English   中英

使用Bottle.py服務器進行線程化

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM