tkr*_*man 1 python multithreading gil python-multithreading python-3.x
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()
Run Code Online (Sandbox Code Playgroud)
使用python3运行:
1
2
3
4
5
6
7
8
9
0
Run Code Online (Sandbox Code Playgroud)
总是一样.
现在我希望你让我正确 - 我不一定希望重新安排这些任务,但我只是想知道为什么排序会发生?我的意思是,人们可以期望在一个线程内以确定的方式完成任务,但线程的严格排队对我来说似乎有些奇怪.
无论如何,我如何在Python 3中获得真正的并发?(据我所知,Jython和IronPython只支持2.x).
所有作业在提交之前都会执行,并且它们都不会写入输出流.你提交调用每个的结果lambda.
即使你使用过:
producersPool.submit(lambda i: print(i), (i,))
Run Code Online (Sandbox Code Playgroud)
在每个线程中没有足够的东西被另一个线程抢占,所以它们都在任何其他线程可以完成之前完成.