0

オブジェクトのハンドルを使用して、スレッドのコンテキストからスレッド オブジェクトのメソッドの 1 つを呼び出そうとしています。ただし、これは機能せず、代わりにメソッドへの呼び出しがメイン スレッドのコンテキストから行われています。これを回避する方法はありますか?

コード例を次に示します。

import threading

class ThreadTest(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
    print '\nInitializing ThreadTest\n'

  def call_me(self):
    ident = threading.current_thread().ident
    print '\nI was called from thread ' + str(ident) + '\n'

  def run(self):
    ident = threading.current_thread().ident
    print '\nStarting thread ' + str(ident) + ' for ThreadTest\n'
    self.call_me()

ident = threading.current_thread().ident
print '\nMain thread ID is ' + str(ident) + '\n'

tt = ThreadTest()
tt.start()
tt.call_me()

# Example Output:
#   Main thread ID is 140735128459616
#
#   Initializing ThreadTest
#
#   Starting thread 4400537600 for ThreadTest
#
#   I was called from thread 4400537600
#
#   I was called from thread 140735128459616

私が探しているのは、スレッドの run メソッドから呼び出されたときと同じ IDtt.call_me()を返すように、スレッドのコンテキストから作成する方法です。current_thread().ident

何か案は?

4

1 に答える 1

0

Python クラス メソッドは、任意のスレッドから呼び出すことができます。これは threading.Thread クラスにも当てはまります。あなたが書いたとき:

tt.call_me()

あなたは、「このコードを実行しているスレッドが何であれ、tt.call_me を呼び出してください」と言っていました。あなたはメインスレッドにいたので、メインスレッドが呼び出しを行いました。Python は、スレッドへの呼び出しを自動的にプロキシしません。

run メソッドの self.call_me 行は問題なく機能しました。「実行」メソッドはスレッドであり、それが呼び出すものはすべてそのスレッドにあります。

于 2013-02-12T21:28:23.620 に答える