从python

时间:2017-10-25 15:51:27

标签: multithreading python-2.7

拥有一个Thread类,当它运行时,它会启动2个线程,每个线程都有自己的目的,并且它们使用队列进行通信。

其中一个线程产生了更多的线程来处理一些东西,我知道这可能是一个糟糕的设计,但她是我的代码

class MyThread(Thread):
  def __init__(self):
    # stuff
    Thread.__init__(self)

  def run(self):
    # some code that start a thread, this one starts fine

    # another thread started here and went fine
    processing_thread = Thread(target=self.process_files())
    processing_thread.daemon = True
    processing_thread.start()
    # more code 

 def process_files(self):
    while True:

      # stuff
      self.publish(file)
      # stuff

 def publish(self, file):
   # more code
   if (condition):
     self.semaphore.acquire(blocking=True)
     # HERE IT BREAKS
     thread = Thread(target=self.process(), args=(satellite, time, )) 
     thread.daemon = True
     thread.start()

 def process(self, satellite, time):
    #interpreter does not reach here

我尝试用以下方式盯着线程:

args=(satellite, time,)
args=(satellite, time)
args=(self, satellite, time,)
args=(self, satellite, time)

我总是收到错误消息TypeError: process() takes exactly 3 arguments (1 given)

我错过了什么,或者甚至可以通过这种方式传递参数?

1 个答案:

答案 0 :(得分:1)

这里的第一条评论是正确的。

构建线程时

thread = Thread(target=self.process(), args=(satellite, time, ))

您正在调用process,而不是将其作为参数传递。这意味着您试图将process()的结果传递给线程,而不是函数本身。