Python中的多线程简介
#python #multithreading #worker #locking

多线程是在单个过程中同时执行多个线程(程序的小单元)的过程。这可以大大提高程序的性能,因为多个线程可以同时运行并有效利用可用的处理能力。

在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 startedWorker 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