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,))
每个线程中没有足够的被另一个线程抢占,所以它们都在任何其他线程可以进入之前完成。
