2016-08-14 4 views
0

私のコードにはリストをチェックするループがあり、リストに項目がある場合は処理してリストから削除します。項目は、別のスレッドによって継続的にリストに挿入されます。スレッディングを使用しながらリストを処理する

while True: 
    for item in list: 
     Process(item) 
     Remove(item) 

問題1:ここでは

はコードである

私は作品の上に持っている何が、問題は、それはCPUに非常に集中的であるということです。
私は 'time.sleep'のようなコードをコードに入れることができますが、このプログラムはリスト内の項目をただちに処理する必要があります。どのようにしてCPUの負荷を減らすか(私は同時に別のスレッドを実行していることに注意してください)。

問題2

私はリストが空の場合に実行されているから、ループを停止し、何かがリストに追加されたときに処理を継続します。これをどうやって行うのですか?

+0

私は理解していません、問題を説明できますか? – martriay

+0

私はあなたが意味するものを理解している場合は、タイムアウト機能を使用することができます。 –

+0

私はちょうど問題の先端を入れる –

答えて

1

queueモジュールが役に立つと思われます。これは、マルチプロデューサ、マルチコンシューマキューを実装し、ビジー待機なしでスレッド間の同期を可能にします。

このqueueモジュールを使用するSolution to producer and consumer problem in pythonも参照してください。

+0

threading.Eventはどうですか? –

+1

明らかに、スレッド間で同期をとることができます(フードの下では、 'queue'クラスは' threading'同期クラスでスレッド間で同期します) – napuzba

関連する問題