之前已经回答过Android,Objective C和C++,但显然不适用于Python.如何可靠地确定当前线程是否是主线程?我可以想到一些方法,其中没有一个真正让我满意,认为它可以像比较它是否容易threading.MainThread.
主线程实例化threading.py如下:
Thread.__init__(self, name="MainThread")
Run Code Online (Sandbox Code Playgroud)
所以可以做到
if threading.current_thread().name == 'MainThread'
Run Code Online (Sandbox Code Playgroud)
但是这个名字是固定的吗?我看过的其他代码检查了是否MainThread包含在线程名称的任何位置.
我可以在程序启动的那一刻存储对起始线程的引用,即当时还没有其他线程.这绝对可靠,但对于这样一个简单的查询来说太麻烦了?
这样做有更简洁的方法吗?
我打电话的时候
self.client = ThreadedClient()
Run Code Online (Sandbox Code Playgroud)
在我的Python程序中,我收到错误
"RuntimeError:主线程不在主循环中"
我已经做了一些谷歌搜索,但我在某种程度上犯了错误...有人可以帮助我吗?
完整错误:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 530, in __bootstrap_inner
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 483, in run
File "/Users/Wim/Bird Swarm/bird_swarm.py", line 156, in workerGuiThread
self.root.after(200, self.workerGuiThread)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 501, in after
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 1098, in _register
RuntimeError: main thread is not in main loop
Run Code Online (Sandbox Code Playgroud)
类别:
class ThreadedClient(object):
def __init__(self):
self.queue = Queue.Queue( )
self.gui = GuiPart(self.queue, self.endApplication)
self.root = self.gui.getRoot()
self.running = True
self.GuiThread = threading.Thread(target=self.workerGuiThread) …Run Code Online (Sandbox Code Playgroud)