相关疑难解决方法(0)

在Python中检查当前线程是否是主线程

之前已经回答过Android,Objective CC++,但显然不适用于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包含在线程名称的任何位置.

存储起始线程

我可以在程序启动的那一刻存储对起始线程的引用,即当时还没有其他线程.这绝对可靠,但对于这样一个简单的查询来说太麻烦了?

这样做有更简洁的方法吗?

python multithreading

31
推荐指数
2
解决办法
2万
查看次数

RuntimeError:主线程不在主循环中

我打电话的时候

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)

python multithreading tkinter

24
推荐指数
3
解决办法
5万
查看次数

标签 统计

multithreading ×2

python ×2

tkinter ×1