0

私はpythonマルチスレッドが初めてで、以下のコードと混乱しています:

#!/usr/bin/env python

import thread
from time import sleep, ctime

loops = [4, 2]

def loop(nloop, nsec, lock):
    print 'start loop', nloop, 'at:', ctime()
    sleep(nsec)
    print 'loop', nloop, 'done at:', ctime()
    lock.release()

def main():
    print 'starting at:', ctime()
    locks = []
    nloops = range(len(loops))

    for i in nloops:
        lock = thread.allocate_lock()
        lock.acquire()
        locks.append(lock)

    for i in nloops:
        thread.start_new_thread(loop,
                    (i, loops[i], locks[i]))

    for i in nloops:
        while locks[i].locked():
            pass

    print 'all done at:', ctime()

if __name__ == '__main__':
    main()

実行しようとすると、以下の結果が得られました

starting at: Fri Aug 03 17:07:20 2012
start loopstart loop  01  at:at:  Fri Aug 03 17:07:20 2012Fri Aug 03 17:07:20 20
12

loop 1 done at: Fri Aug 03 17:07:22 2012
loop 0 done at: Fri Aug 03 17:07:24 2012
all done at: Fri Aug 03 17:07:24 2012

ご覧のとおり、これら2つのスレッドの「開始」出力が混同されており、何か競合があると思いますが、詳細と修正方法がわかりません。誰か助けてもらえますか? ありがとう。

4

1 に答える 1

0

これは、スレッドと I/O を操作するときの非常に一般的な状況です。スレッドは同時に stdout に書き込み、それらのメッセージが混在します。

マルチスレッドの実装に問題はないはずです。

于 2012-08-03T09:48:53.000 に答える