1
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

いつも同じ。

今、私はあなたに私を正しく理解してもらいたいです-私は必ずしもそれらのタスクが並べ替えられることを望んでいませんが、なぜ並べ替えが起こるのか疑問に思っています. つまり、1 つのスレッド内で決定論的な方法で処理を行うことが期待できますが、スレッドの厳密なキューイングは少し奇妙に思えます。

とにかく、Python 3 で本当の同時実行性を得るにはどうすればよいですか? (私の知る限り、Jython と IronPython は 2.x のみをサポートしています)。

4

2 に答える 2

5

すべてのジョブはサブミットされるに実行され、出力ストリームへの書き込み以上のことを行うものはありません。それぞれを呼び出した結果を送信しますlambda

使用した場合でも:

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

各スレッドには、別のスレッドがプリエンプトするのに十分な数がないため、他のスレッドが入る前にすべて完了します。

于 2013-12-21T16:28:34.513 に答える