我正在构建一个机器人头部,通过AIML机器人监听和说话,同时相机用opencv2挑选面部。我有各种各样的线程运行,以便它可以同时观察,聆听,说话和移动它的嘴,眼睛和整个头部。线程需要相互交互,我有代码执行此操作。这"听"线程需要将数据传递回主模块。这很好用:
class listen(threading.Thread):
def __init__(self, workQueue, queueLock):
super(listen, self).__init__()
self.workQueue = workQueue
self.queueLock= queueLock
def run(self): # "listening" thread
with sr.Microphone() as source:
# do lots of things......
self.workQueue.put(some_data) # put data in queue
我的问题是我的听力"线程调用函数"说()"并且它来自这个函数,我需要做workQueue.put()而不是上面的run(self)定义。我无法理解如何从say()函数中引用self.workQueue.put(some_data)的语法,或者确实是可能的。希望这是有道理的。