拥有一个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)
我错过了什么,或者甚至可以通过这种方式传递参数?
答案 0 :(得分:1)
这里的第一条评论是正确的。
构建线程时
thread = Thread(target=self.process(), args=(satellite, time, ))
您正在调用process
,而不是将其作为参数传递。这意味着您试图将process()
的结果传递给线程,而不是函数本身。