多线程是在单个过程中同时执行多个线程(程序的小单元)的过程。这可以大大提高程序的性能,因为多个线程可以同时运行并有效利用可用的处理能力。
在Python中,使用threading
模块实现多线程。在此模块中,Thread
类代表执行线程,并提供了一种在程序中创建和运行线程的简单方法。
一个简单的例子
这是一个简单的示例,演示了threading
模块的基本用法:
import time
import threading
def worker():
print("Worker thread started")
time.sleep(1)
print("Worker thread finished")
thread = threading.Thread(target=worker)
thread.start()
print("Main thread finished")
在此示例中,我们定义了一个函数worker
,该函数只需打印消息然后睡1秒即可。然后,我们创建一个Thread
对象,将worker
作为线程执行的目标函数传递。最后,我们使用start
方法启动线程。
运行此程序时,您会看到Worker thread started
和Worker thread
完成的消息与Main thread finished
消息交织在一起,因为这两个线程同时运行。
在线程之间共享数据
在某些情况下,您可能需要在线程之间共享数据。一种简单的方法是使用像这样的全局变量:
import time
import threading
counter = 0
def worker():
global counter
print("Worker thread started")
for i in range(100000):
counter += 1
print("Worker thread finished")
thread = threading.Thread(target=worker)
thread.start()
time.sleep(1)
print("Counter value:", counter)
print("Main thread finished")
在此示例中,我们定义了一个由worker
螺纹递增的全局变量counter
。当Main
线程完成时,它会打印counter
的最终值,表明这两个线程已共享对相同数据的访问。
锁定
但是,在线程之间共享数据时要小心,因为这很容易导致竞赛条件,其中多个线程尝试同时访问和修改相同的数据,从而导致无法预测的结果。为了避免这种情况,您可以使用锁同步对共享数据的访问,例如:
import time
import threading
counter = 0
lock = threading.Lock()
def worker():
global counter
print("Worker thread started")
for i in range(100000):
with lock:
counter += 1
print("Worker thread finished")
thread = threading.Thread(target=worker)
thread.start()
time.sleep(1)
print("Counter value:", counter)
print("Main thread finished")
在此示例中,我们使用Lock
对象来同步对共享counter
变量的访问。 with
语句确保在修改变量之前获取锁定,并在修改完成后发布。这确保只有一个线程可以访问变量。
了解有关Python多线程的更多信息:Click Here
与我联系:Linkedin