1

リストがあり、リスト内の各アイテムに対して同時にループを実行しようとしています

私はこのコードを使用してみました:

thelist = ['first', 'second', 'third']

def loop():
    while True:
        for x in thelist:
            x = str(x)
            time.sleep(5)
            do_stuff_that_includes_x()

しかし、それは でソートされているように、ループ内のものを 1 つずつthelist実行します。

そして、すべてのアイテムをthelist 同時に処理したいのです。

前もって感謝します。

4

4 に答える 4

3

vossad01 のコメントで指摘されているように、コードにはループ内で 5 秒の遅延があります。これにより、リストの 2 つの項目の間に 5 秒の遅延が発生します。5 秒の遅延を削除すると、メッセージはリスト内のすべての部屋にほぼ瞬時に送信されます。

thelist = ['first', 'second', 'third']

def loop():
    while True:
        for x in thelist:
            x = str(x)
            do_stuff_that_includes_x() 

        time.sleep(5)
于 2012-09-15T18:40:30.913 に答える
2

マルチプロセッシングが必要だと思います:

import time

def work(x):
    x = str(x)
    time.sleep(5)
    print x
#   do_stuff_that_includes_x()

thelist = ['first', 'second', 'third']
from multiprocessing import Pool
p = Pool( len( thelist ) )
p.map( work, thelist )
于 2012-07-03T14:12:59.930 に答える
2

まず、グローバル インタープリター ロック (GIL) が原因で、マルチスレッド並列化ではパフォーマンスが向上しない傾向があります。したがって、パフォーマンス上の理由でこれを行う場合は、マルチプロセッシングモジュールを確認する必要があります。単純な python ループを並列化する方法を参照してください。プロセス プールのマップ メンバーを使用してこれを実現する例については、 を参照してください。

補足: 反復変数 (x) を再割り当てするのは悪い形式です。さらに、並列実行が必要なため、x でパラメーター化された do_stuff_that_includes_x(​​) を作成できると最も簡単です。

于 2012-07-03T14:17:24.780 に答える
0

演算子を使用*して、リスト全体を一度にアンパックします

do_stuff_that_includes_x(*x)
于 2012-07-03T14:01:23.330 に答える