Python中的多线程指的是在一个程序中同时执行多个线程。使用多线程可以提高程序的运行效率,特别是对于需要处理大量并发请求或者需要等待IO等待的任务来说,多线程编程非常有用。
在Python中,可以使用threading模块来实现多线程编程。下面是一些基本的概念和使用方法:
- 创建线程
要创建一个线程,需要创建一个Thread对象,并将要执行的函数作为参数传递给它。例如:
import threading
def func():
print("hello, world!")
t = threading.Thread(target=func)
- 启动线程
创建线程后,需要使用start()函数来启动线程。例如:
t = threading.Thread(target=func)
t.start()
- 线程等待
要等待一个线程执行完毕,可以使用join()函数。例如:
t = threading.Thread(target=func)
t.start()
t.join()
- 线程同步
在线程中访问共享资源时,需要使用锁来保证线程安全。可以使用threading模块中的Lock对象来实现锁。例如:
import threading
lock = threading.Lock()
count = 0
def func():
global count
lock.acquire()
try:
count += 1
finally:
lock.release()
threads = []
for i in range(10):
t = threading.Thread(target=func)
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
print(count)
上面的代码中,使用了一个全局变量count来记录线程执行的次数。每个线程在访问count变量时,首先需要获取锁。获取到锁后,线程可以修改count变量的值,完成后释放锁。
- GIL(全局解释器锁)
在Python中,有一个GIL(Global Interpreter Lock)锁,它是为了保证线程安全而存在的。由于解释器只有一个,GIL可以确保同时只有一个线程在执行Python代码。因此,就算在多线程程序中,每个线程也只能在单个CPU上运行,无法实现真正的并行计算。
下面是两个示例,分别实现了基本的线程创建,并进行了线程数与计数的比对:
示例1:线程创建及数目对比
import threading
def worker():
print('I am in thread', threading.currentThread().name)
threads = []
for i in range(10):
t = threading.Thread(target=worker, name=('Thread %d' % i))
threads.append(t)
t.start()
print('Number of threads created: %d' % len(threading.enumerate()))
输出结果:
I am in thread Thread 0
I am in thread Thread 1
I am in thread Thread 2
I am in thread Thread 4
I am in thread Thread 3
I am in thread Thread 5
I am in thread Thread 6
I am in thread Thread 7
I am in thread Thread 8
I am in thread Thread 9
Number of threads created: 11
在上面的示例中,创建了10个线程,分别输出了“I am in thread”和线程名字,最后通过len函数统计了线程数。可以看到,线程数为11,其中一个线程是主线程。
示例2:锁的使用及计数对比
import threading
counter = 0
lock = threading.Lock()
def worker():
global counter
with lock:
counter += 1
threads = []
for i in range(100):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
for t in threads:
t.join()
print('Final counter: %d' % counter)
输出结果:
Final counter: 100
在上面的示例中,使用了一个计数器counter,并保证了线程安全。创建了100个线程,让每个线程都会执行100次计数操作,最后输出计数器的值,结果为100,符合预期。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的多线程编程是什么?如何使用多线程? - Python技术站