发布于2026-07-08 阅读(0)
扫一扫,手机访问
在 Ubuntu 上搞 Python 多线程,其实比你想象的要简单得多。Python 标准库自带的 threading 模块就是干这个活的,下面先从一个最基础的例子切入,看看怎么创建和启动一个线程。

import threading
# 定义一个线程要执行的函数
def print_numbers():
for i in range(5):
print(i)
# 创建一个线程对象
thread = threading.Thread(target=print_numbers)
# 启动线程
thread.start()
# 等待线程完成
thread.join()
print("线程执行完毕")
代码逻辑很直白:先导入 threading,然后写一个普通函数 print_numbers,这个函数将在新线程里跑。接着用 Thread 把这个函数包装成线程对象,调用 start() 让它跑起来,再用 join() 等待它结束。注意最后那个 join()——如果不加,主线程可能先跑完,导致输出顺序出问题。
不过,现实中的多线程往往不是各跑各的那么简单。一旦多个线程要读写同一份数据,就会遇到“竞争条件”——你改我改,数据就乱套了。这时候就需要上锁(Lock)来保证同一时间只有一个线程能碰共享资源。
下面是一个带锁的例子,两个线程同时打印数字,但通过锁确保每次只有一个线程在执行打印操作:
import threading
lock = threading.Lock()
def print_numbers():
for i in range(5):
lock.acquire()
try:
print(i)
finally:
lock.release()
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_numbers)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print("线程执行完毕")
这里的关键是 lock.acquire() 和 lock.release() 之间的代码段,它被称作“临界区”。用 try...finally 包裹是为了保证锁一定能被释放——哪怕在打印时抛出异常,锁也不会一直卡着。两个线程会轮流获取锁、打印数字,保证输出的顺序不会乱套。
不过要泼一盆冷水:Python 的全局解释器锁(GIL)让多线程在 CPU 密集型任务上很难真正提速。GIL 保证同一时刻只有一个线程能执行 Python 字节码,所以如果你要并行计算大量数值,多线程往往跑不过单线程。遇到这种情况,建议换用 multiprocessing 模块——它通过创建独立进程来绕过 GIL 的限制,才能真正利用多核 CPU。
简单总结:threading 适合 I/O 密集型任务(比如网络请求、文件读写),以及需要共享状态的场景;CPU 密集型的重活,还是交给多进程来办更靠谱。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8