3

我正在制作一个 wxPython 应用程序,我需要每 15 秒从互联网更新一个值。有什么方法可以让我有一个函数来设置这个值,并让它在这个时间间隔在后台运行,而不会中断程序?

编辑:这是我正在尝试的:

import thread

class UpdateThread(Thread):
    def __init__(self):
        self.stopped = False
        UpdateThread.__init__(self)
    def run(self):
        while not self.stopped:
            downloadValue()
            time.sleep(15)
def downloadValue():
    print x

UpdateThread.__init__()
4

3 回答 3

2

您想要的是添加一个以指定速度运行您的任务的线程。

您可以在这里查看这个很棒的答案:https ://stackoverflow.com/a/12435256/667433来帮助您实现这一目标。

编辑:这是应该为您工作的代码:

import time
from threading import Thread # This is the right package name

class UpdateThread(Thread):
    def __init__(self):
        self.stopped = False
        Thread.__init__(self) # Call the super construcor (Thread's one)
    def run(self):
        while not self.stopped:
            self.downloadValue()
            time.sleep(15)
    def downloadValue(self):
        print "Hello"

myThread = UpdateThread()
myThread.start()

for i in range(10):
    print "MainThread"
    time.sleep(2)

希望能帮助到你

于 2013-03-05T13:47:19.473 回答
0

我做了类似的事情:

- 你需要一个线程在后台运行。

- 并定义一个“自定义”事件,以便在需要时可以通知 UI

创建自定义 WX 事件

(MyEVENT_CHECKSERVER, EVT_MYEVENT_CHECKSERVER) = wx.lib.newevent.NewEvent()

在 UI " init " 上,您可以绑定事件,并启动线程

    #  bind the custom event 
    self.Bind(EVT_MYEVENT_CHECKSERVER, self.foo)
    # and start the worker thread
    checkServerThread = threading.Thread(target=worker_checkServerStatus
                                        ,args=(self,) )
    checkServerThread.daemon = True
    checkServerThread.start()

工作线程可以是这样的,ps。caller 是 UI 实例

def worker_checkServerStatus(调用者):

   while True:    
       # check the internet code here
       evt = MyEVENT_CHECKSERVER(status='Some internet Status' ) #make a new event
       wx.PostEvent(caller, evt) # send the event to the UI
       time.sleep(15) #ZZZzz for a bit

编辑:错过阅读问题...

于 2013-03-05T14:16:55.960 回答
0

另一种方法是使用计时器:

import threading
stopNow = 0
def downloadValue():
    print("Running downloadValue")
    if not stopNow: threading.Timer(15,downloadValue).start()

downloadValue()

这是重复函数的经典模式:函数本身会为其自身添加一个定时调用。要开始循环,请调用该函数(它立即返回)。要打破循环,请将 stopNow 设置为 1。

于 2019-01-13T19:41:54.600 回答