Python中的线程threading.Thread()使用详解
简介
Python中的线程模块(threading)可以帮助我们在应用程序中实现多个线程,从而实现多任务处理。这个模块是基于Java中的线程模块来开发的,提供了比较完整的线程管理和控制的功能。本文将介绍一些Python中线程(threading.Thread)的使用详解。
创建线程
Python中,我们可以通过继承threading.Thread来创建线程,具体代码如下:
import threading
class MyThread(threading.Thread):
def __init__(self, name):
super(MyThread, self).__init__()
self.name = name
def run(self):
print("Hello, %s" % self.name)
if __name__ == '__main__':
t1 = MyThread('thread1')
t2 = MyThread('thread2')
t1.start()
t2.start()
t1.join()
t2.join()
在上述代码中,我们通过继承threading.Thread来定义线程类MyThread,然后重写run方法,这个方法是线程启动时自动调用的。打印语句"Hello, %s" % self.name将输出线程名字。最后我们创建了两个线程,分别输出"Hello, thread1"和"Hello, thread2"。
线程锁
在多线程的应用程序中,我们可能需要对共享的资源进行多个线程间的访问控制,以避免数据的竞争和混乱。这时候就需要用到线程锁(threading.Lock),Python中提供了相应的方法来创建和使用线程锁。
以下是一个简单的示例,用来演示线程锁的基本用法:
import threading
class Counter:
def __init__(self, num):
self.lock = threading.Lock()
self.num = num
def increment(self):
self.lock.acquire()
self.num += 1
self.lock.release()
if __name__ == '__main__':
c = Counter(0)
threads = []
for i in range(10):
t = threading.Thread(target=c.increment)
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
print(c.num)
在上述代码中,Counter类包含一个num变量和一个相应的线程锁self.lock。在increment方法中,我们首先获取锁self.lock,这样这个线程就可以访问num变量。完成操作后,我们再释放锁self.lock以允许其他线程访问这个变量。
在主程序中,我们创建了10个线程,每个线程都调用Counter类中的increment方法来增加num变量的值。最终结果应该是num==10。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的线程threading.Thread()使用详解 - Python技术站