2017-01-17 6 views
1

idle.pyはキューを含むファイルです。このキューは頻繁に更新されます(電子メールが受信されると、私は大幅に簡略化しましたが、 ):Python - 定期的に更新されるキューのインポート

import Queue 

q = Queue.Queue() 
if email received: 
    id = email_id 
    q.put(id) 

queuing.pyは、キューの中の何かがあるようにするために待機したファイルです:

from idle import q 
import time 

while True: 
    if q.empty() == False: 
     number = q.get() 
     print "the number is: %s" % number 
    print "check queue again" 
    time.sleep(1) 

私が遭遇しています問題はq.emtpy()は常に真として戻っているということですidle.pyの待ち行列に値が設定されていても、queuing.pyに入れます(これはprint q.empty() in idle.py)。

+0

私は、idle.pyにクラスを含むようにします。また、待ち行列の変数にアイドル状態の待ち行列を割り当てるようにしてください。あたかも異なるキューにアクセスしているように見えます。 – Navidad20

+0

idle.pyで作成されたのと同じキューにアクセスするために、別のキューにアクセスしているようです。 – user7399815

+0

解決方法は、queuing.pyを取り除き、キューをチェックするスレッドをidle.pyで作成することです。 – user7399815

答えて

0

これはソリューションの一般的な前提ですが、基本的にキューを常にポーリングする別のスレッドを開始します。

import Queue 
import time 
import threading 

def idle(): 
    if email received: 
     id = email_id 
     q.put(id) 

def queuing(): 

    while True: 
    if q.empty() == False: 
     number = q.get() 
     print "the number is: %s" % number 
    print "check queue again" 
    time.sleep(1) 

q = Queue.Queue() 
thread1 = Thread(target = idle) 
thread2 = Thread(target = queuing) 
thread1.start() 
thread2.start() 
関連する問題