2

2 つのスレッドを実行しようとしていますが、それぞれに引数が渡されて処理されます。ただし、スレッドは並列ではなく順次実行されているようです。目撃者:

$ cat threading-stackoverflow.py 
import threading

class CallSomebody (threading.Thread):
        def __init__(self, target, *args):
                self._target = target
                self._args = args
                threading.Thread.__init__(self)

        def run (self):
                self._target(*self._args)

def call (who):
        while True:
                print "Who you gonna call? %s" % (str(who))

a=CallSomebody(call, 'Ghostbusters!')
a.daemon=True
a.start()
a.join()

b=CallSomebody(call, 'The Exorcist!')
b.daemon=True
b.start()
b.join()

$ python threading-stackoverflow.py 
Who you gonna call? Ghostbusters!
Who you gonna call? Ghostbusters!
Who you gonna call? Ghostbusters!
Who you gonna call? Ghostbusters!
Who you gonna call? Ghostbusters!
Who you gonna call? Ghostbusters!
Who you gonna call? Ghostbusters!

Ghostbusters!一部の行が返され、他の行が返されると予想されますがThe Exorcist!Ghostbusters!行は永遠に続きます。各スレッドにプロセッサ時間を確保するには、何をリファクタリングする必要がありますか?

4

1 に答える 1

3

a.join()これはあなたの問題です:前に呼び出すb.start()

あなたはもっと好きなものが欲しい:

a=CallSomebody(call, 'Ghostbusters!')
a.daemon=True
b=CallSomebody(call, 'The Exorcist!')
b.daemon=True
a.start()
b.start()
a.join()
b.join()
于 2012-11-25T20:14:53.007 に答える