<p>在Python中实现线程代码有两种基本方法。你似乎每个都有一半</p>
<p>第一个实现模型是将要在线程中运行的逻辑放入函数中,然后在创建<code>threading.Thread</code>实例时将该函数作为<code>target</code>参数传递:</p>
<pre><code>import threading
import time
def worker(n):
for i in range(n):
print(i)
time.sleep(0.5)
my_thread = threading.Thread(target=worker, args=(10,))
my_thread.start()
# do other stuff in the main thread, if desired
my_thread.join()
</code></pre>
<p>另一种实现方法是将<code>threading.Thread</code>子类化,并将要运行的代码放在<code>run</code>方法(或从<code>run</code>调用的其他方法)内的线程中。如果您的线程代码具有某些复杂的状态,并且希望在线程运行时能够使用其他方法来操纵该状态,则这一点尤其有用:</p>
<pre><code>class MyThread(threading.Thread):
def __init__(self, n):
super().__init__()
self.n = n
self.unpaused = threading.Event()
self.unpaused.set() # we start unpaused
def run(self):
for i in range(self.n):
self.unpaused.wait() # block if we're paused
print(i)
time.sleep(0.5)
def pause(self):
self.unpaused.clear()
def unpause(self):
self.unpaused.set()
my_thread = MyThread(10)
my_thread.start()
# an example of inter-thread communication, we pause and unpause our thread using its methods
time.sleep(2)
my_thread.pause()
time.sleep(2)
my_thread.unpause()
my_thread.join()
</code></pre>