我的wxPython应用程序中有一个后台线程来保持GUI响应。 在我的后台线程的“run”方法中有一段时间(真实)循环,但我还有其他方法,我有时会从GUI线程调用。无论如何在我进入后台线程的另一个方法时停止run方法?
答案 0 :(得分:1)
假设您有类似的代码:
import threading
import time
class MyWorkerThread(threading.Thread):
def run():
while True:
# Do some important stuff here
foo()
time.sleep(0.5)
def foo():
# Do something important here too
pass
class SomeRandomButton:
def __init__(worker_thread):
self.worker_thread = worker_thread
# Function called when button is clicked
def on_button_clicked():
self.worker_thread.foo();
my_worker_thread = MyWorkerThread()
my_button = SomeRandomButton(my_worker_thread)
# Start thread
my_worker_thread.run()
# Initialize the GUI system (creating controls etc.)
# Start GUI system
GUISystem.run()
上面的代码实际上没有做任何事情,甚至不会运行,但我会用它来表明线程对象(MyWorkerThread.foo
)中的函数不会拥有要从该特定线程调用,可以从任何线程调用它。
您可能希望阅读有关多线程的更多信息,并且可能需要semaphores来保护数据不被多线程同时访问。
答案 1 :(得分:0)
喜欢
while(alive):
while(not stopped):
"""
thread body
"""
以及其他地方你可以用
暂停线程stopped=True
而不是使用
stopped = True
alive = False
退出线程