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運行:爲什麼Python的GIL強制執行嚴格的處理順序?
1
2
3
4
5
6
7
8
9
0
總是相同的。
現在我想讓你知道我的意思 - 我不一定希望這些任務重新排序,但我只是想知道爲什麼訂購發生在?我的意思是,人們可以期望在一個線程內以確定性的方式完成事情,但嚴格排隊的線程對我來說似乎有點奇怪。
無論如何,我如何在Python 3中獲得真正的併發性? (就我所知,Jython和IronPython僅支持2.x)。
您的示例包含一個重要錯誤:您實際上是_calling_ lambda,並且只會將_result_(通常爲None)傳遞給'submit'。觀察到的行爲與ThreadPool無關。你可能想寫'(lambda i:(lambda:print(i)))(i)'。 – l4mpi
@ l4mpi,是的,我已經注意到它,並已經擊中了自己的臉。我將代碼編輯爲'producersPool.submit(sleepy,i)',它按預期運行,即是一種相當不可預測的時尚。謝謝。 – tkroman