擅长:python、mysql、java
<p><code>threading.current_thread().name == 'MainThread'</code>的问题是人们总是可以做到:</p>
<pre><code>threading.current_thread().name = 'MyName'
assert threading.current_thread().name == 'MainThread' # will fail
</code></pre>
<p>或许以下更为可靠:</p>
<pre><code>threading.current_thread().__class__.__name__ == '_MainThread'
</code></pre>
<p>话虽如此,人们仍可能狡猾地:</p>
<pre><code>threading.current_thread().__class__.__name__ = 'Grrrr'
assert threading.current_thread().__class__.__name__ == '_MainThread' # will fail
</code></pre>
<p>但这个选项似乎更好;<a href="https://mail.python.org/pipermail/tutor/2003-October/025932.html" rel="noreferrer">"after all, we're all consenting adults here."</a></p>
<p><strong>更新:</strong></p>
<p>Python 3.4引入了<a href="https://docs.python.org/3.4/library/threading.html#threading.main_thread" rel="noreferrer">^{<cd2>}</a>,这比上面的要好得多:</p>
<pre><code>assert threading.current_thread() is threading.main_thread()
</code></pre>
<p><strong>更新2:</strong></p>
<p>对于Python<;3.4,最好的选择可能是:</p>
<pre><code>isinstance(threading.current_thread(), threading._MainThread)
</code></pre>