从线程的上下文调用线程对象的方法

时间:2013-02-12 21:04:50

标签: python python-multithreading

我正在尝试使用对象的句柄从线程的上下文调用一个线程对象的方法。但是,这不起作用,而是从主线程的上下文调用该方法。有没有办法解决这个问题?

以下是一些示例代码:

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

我正在寻找的方法是让tt.call_me()来自线程的上下文,以便current_thread().ident返回与从线程的run方法调用时相同的ID。 / p>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可以从任何线程调用Python类方法。这也适用于线程。也是线程类。当你写道:

tt.call_me()

你说,“无论运行此代码的线程是什么,请调用tt.call_me”。因为你在主线程中,主线程进行了调用。 Python不会自动代理对线程的调用。

run方法中的self.call_me行工作正常。 'run'方法是线程,它调用的任何东西都在该线程中。