Python 每隔一段时间重复这个功能?

Python 每隔一段时间重复这个功能?,python,multithreading,timer,wxpython,Python,Multithreading,Timer,Wxpython,我正在制作一个wxPython应用程序,我需要每隔15秒从互联网上更新一个值。有没有什么方法可以让我有一个函数来设置这个值,并让它在后台以这个间隔运行,而不会中断程序 编辑:以下是我正在尝试的: import thread class UpdateThread(Thread): def __init__(self): self.stopped = False UpdateThread.__init__(self) def run(self):

我正在制作一个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__()

您需要添加一个线程,以指定的速度运行任务

你可以在这里看到一个很好的答案:帮助你实现这一目标

编辑:以下是适用于您的代码:

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)

希望能有所帮助

我做了类似的事情:

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

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

创建自定义WX事件

(MyEVENT_CHECKSERVER、EVT_MyEVENT_CHECKSERVER)= wx.lib.newevent.newevent()

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

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

def worker_checkServerStatus(调用方):


编辑:错过阅读问题…

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

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

downloadValue()

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

我已经安排好了课程,那你怎么开始呢?我正在获取
NameError:启动时未定义名称“Thread”
。使其正常工作。所以,一旦它启动,它就可以自己运行,在同一个终端中,但与脚本的主流程分离?是的,没错。为了让自己相信这一点,您可以在
myThread.start()
行(如答案所示)之后添加一段代码。是的,只需将
myThread.stopped
设置为
True
,它将在最多15秒后结束。您可以通过在主线程中调用
myThread.join()
函数来了解它,该函数将一直阻塞,直到线程完成。是的,确切地说,或者您也可以将它放入
OnExit
事件处理程序中。
   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
import threading
stopNow = 0
def downloadValue():
    print("Running downloadValue")
    if not stopNow: threading.Timer(15,downloadValue).start()

downloadValue()