商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu Python如何使用多线程

Ubuntu Python如何使用多线程

  发布于2026-07-08 阅读(0)

扫一扫,手机访问

在 Ubuntu 上搞 Python 多线程,其实比你想象的要简单得多。Python 标准库自带的 threading 模块就是干这个活的,下面先从一个最基础的例子切入,看看怎么创建和启动一个线程。

Ubuntu Python如何使用多线程

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 密集型的重活,还是交给多进程来办更靠谱。

本文转载于:https://www.yisu.com/ask/27772095.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注