发布于2026-07-31 阅读(0)
扫一扫,手机访问
在Ubuntu上做Python多线程编程,标准库里的threading模块是首选工具。先看一个最基础的例子,演示如何创建和启动线程:

import threading# 定义一个线程要执行的函数def print_numbers():for i in range(5):print(f"Number from thread: {i}")# 创建线程对象thread1 = threading.Thread(target=print_numbers)thread2 = threading.Thread(target=print_numbers)# 启动线程thread1.start()thread2.start()# 等待所有线程完成thread1.join()thread2.join()print("Finished executing threads")这段代码定义了一个print_numbers函数,它会循环打印数字。然后创建两个Thread对象,都指向同一个函数。调用start()启动线程,再用join()等待它们跑完。需要注意,由于线程是并发执行的,打印出来的数字可能会交错出现——两个线程同时访问标准输出,结果就容易乱序。
如果想在多个线程之间共享数据,就得用锁(Lock)来避免竞态条件。下面这个例子展示了带锁的写法:
import threading# 创建一个锁对象lock = threading.Lock()# 定义一个线程要执行的函数def print_numbers_with_lock(thread_name):for i in range(5):# 获取锁,确保同一时间只有一个线程可以执行这段代码with lock:print(f"Number from {thread_name}: {i}")# 创建线程对象thread1 = threading.Thread(target=print_numbers_with_lock, args=("Thread-1",))thread2 = threading.Thread(target=print_numbers_with_lock, args=("Thread-2",))# 启动线程thread1.start()thread2.start()# 等待所有线程完成thread1.join()thread2.join()print("Finished executing threads")这里创建了一个Lock对象,在print_numbers_with_lock函数里用with lock确保每次只有一个线程能执行打印操作。这样就不会出现两个线程同时输出导致的数据混乱了。
最后提一下Python的全局解释器锁(GIL)。它限制了同一时刻只能有一个线程执行Python字节码,所以对于CPU密集型任务,多线程未必能带来性能提升。这种情况下,可以考虑用multiprocessing模块来实现真正的并行计算。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8