Skip to main content
 首页 » 编程设计

python之为什么 Python 的 GIL 强制执行严格的处理顺序

2025年05月04日14linjiqin

from concurrent.futures import ThreadPoolExecutor, as_completed 
 
def main(): 
    with ThreadPoolExecutor(max_workers=16) as producersPool: 
        for i in [1,2,3,4,5,6,7,8,9,0]: 
            producersPool.submit((lambda i : print(i))(i)) 
 
 
if __name__ == "__main__": 
    main() 

使用 python3 运行:

1 
2 
3 
4 
5 
6 
7 
8 
9 
0 

总是一样。

现在我希望你能理解我的意思——我不一定希望这些任务被重新排序,但我只是想知道为什么排序会发生?我的意思是,人们可以期望在一个线程内以确定性的方式完成工作,但线程的严格排队对我来说似乎有点奇怪。

无论如何,如何在 Python 3 中获得真正的并发性? (据我所知,Jython 和 IronPython 仅支持 2.x)。

请您参考如下方法:

所有作业都在提交之前执行,并且它们所做的只是写入输出流。您提交调用每个 lambda 的结果。

即使您使用:

producersPool.submit(lambda i: print(i), (i,)) 

每个线程中没有足够的被另一个线程抢占,所以它们都在任何其他线程可以进入之前完成。