我的代码的目的是阅读Tweet并根据推文中包含的术语点亮LED。我尝试使用传统的编码方法,但由于某种原因,它需要永远处理推文。
因此我正在尝试线程化(我是新手)。我遇到的问题是现在读取的推文非常好,但我的代码不会等待LED在处理下一条推文之前关闭。所以我真正想要实现的是:阅读推文 - >检查推文中的术语是否 - >点亮LED - >阅读下一条推文,依此类推。我将推文放在队列中,并指派工作人员对其进行处理。以下是我的代码的一部分。
class BlinkyLED(TwythonStreamer):
num_threads = 5
check_string = ' '
def on_success(self, data):
global check_string
if 'text' in data:
check_string = data['text'].encode('utf-8')
print 'Queuing:', check_string
q.put(check_string)
def printTweet(i,q):
while True:
print '%s: Waiting for the next Tweet' % i
check_string = q.get()
print '%s: Downloading:' % i, check_string
if TERM[0] in check_string:
print ' Turning ON Red LED'
GPIO.output(Red,GPIO.HIGH)
time.sleep(LED_secs_on)
print ' Turning OFF Red LED'
GPIO.output(Red,GPIO.LOW)
if TERM[1] in check_string:
print 'Turning ON Green LED'
GPIO.output(Green,GPIO.HIGH)
time.sleep(LED_secs_on)
print 'Turning OFF Green LED'
GPIO.output(Green,GPIO.LOW)
q.task_done()
for i in range(num_threads):
worker = Thread(target = printTweet, args = (i,q,))
worker.setDaemon(True)
worker.start()
def on_error(self, status_code, data):
print status_code
self.disconnect()
q.join()
try:
stream = BlinkyLED(APP_KEY, APP_SECRET,OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
stream.statuses.filter(track=TERM)
except KeyboardInterrupt:
GPIO.cleanup()