Python线程队列Twython

时间:2015-07-06 08:20:56

标签: python multithreading twitter queue

我的代码的目的是阅读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()

0 个答案:

没有答案