You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多线程/多进程并行场景下库函数调用机制问询

Python并行化调用库函数机制问题解答

问题1:4个线程是否会并发执行np.sort,还是需要等待前一个线程执行完才能调用

结论是这4个线程可以并发执行np.sort,不需要互相等待。
原因是CPython解释器的全局解释器锁(GIL)只会在执行Python字节码时保持持有,而np.sort的核心排序逻辑是C语言实现的纯数值计算,执行过程中不涉及Python对象的修改,numpy在实现时会主动释放GIL。因此当某一线程进入np.sort的底层计算逻辑后,GIL已经被释放,其他线程可以正常获取GIL并启动自己的排序任务,多个排序流程会被CPU并行调度。

问题2:该执行行为是否同样适用于非numpy类的其他Python库函数

结论是不通用,具体表现完全取决于库函数的实现逻辑,可以分为两类情况:

  • 若库函数的核心逻辑由C/C++/Rust等编译型语言实现,且开发时做了GIL释放处理,就和np.sort表现一致,多线程下可以并发执行,不会被GIL阻塞。常见的比如pandas的数值计算函数、OpenCV的图像处理函数都属于这类。
  • 若库函数是纯Python实现,或是底层实现没有做GIL释放处理,那么同一时间只能有一个线程执行该函数,其余线程需要等待GIL释放后才能轮流执行,无法实现并发。

全并行场景补充说明

如果不限于多线程,其他Python并行场景的表现如下:

  • 多进程场景:每个进程持有独立的Python解释器和独立的GIL,不存在GIL竞争问题,无论库函数是哪种实现,都可以完全并行执行,只是多进程的启动、通信开销远高于多线程。
  • 异步IO(asyncio)场景:只有原生支持异步的库函数才能实现并发,普通同步库函数(包括np.sort)在协程中调用时会阻塞整个事件循环,无法达到并发效果。

示例代码

你给出的测试代码运行时,4个np.sort任务会并行执行,仅print操作因为共享标准输出流可能出现输出内容乱序的情况,排序逻辑本身不会互相等待:

import threading
import numpy as np

def funk(x):
    print(np.sort(x)) 

a = np.array([3,4,2,1])
b = np.array([5,8,6,7])
c = np.array([9,2,1,4])
d = np.array([6,1,5,2])

threads= []
array_list = [a,b,c,d]
for each in array_list:
  t1 = threading.Thread(target = funk, args = [each])    
  t1.start()
  threads.append(t1)
  
for x in threads:
    x.join()

内容的提问来源于stack exchange,提问作者Prithviraj Kanaujia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 22:36:03