2016-09-24 3 views
0

私はQueue.Queue()python:queue.queue()サイズを設定するベストプラクティス?

私は(そのQueue.Queueにジョブを置く生産者の束)とキュー

1からポップし、消費者の束を持っているが)キャッピングの利点がある持っていますキューのサイズと比べてサイズが小さいですか?
2)サイズをキャッピングしないことによって、実際にはサイズ制限はありませんか?永遠に成長することができますか?

私は、デッドロックがキューがあなたのサイズにキャップをしていない場合は、メモリが不足するまで、Queueが成長することができ、固定サイズ

答えて

0

を持っているときに、よりを発生するように気づきました。したがって、サイズの制限はPythonによって課せられませんが、マシンには依然として有限のリソースがあります。いくつかのアプリケーション(おそらく最も)で

、プログラマは、メモリの消費量が、そのアプリケーションの特定の文字に起因する問題になることはできません知っています。

しかし、例えば、あなたがサイズをキャッピング、「永遠に実行する」プロデューサー、プロデューサーよりもはるかに遅いを実行し、消費者を持っている場合は、無制限のメモリ要求を回避することが必須です。

デッドロックに関しては、Queueのサイズが制限されているかどうかにかかわらず、Queueの実装がデッドロックを引き起こす可能性はほとんどありません。デッドロックはアプリケーションコードの脆弱性によるものです。たとえば、ネットワーク経由で物事を取得し、誤ってネットワーク接続が壊れたときにエラーを抑制するプロデューサを撮影します。その後、プロデューサーは新しいアイテムを作成することができないので、消費者は最終的には、何か新しいものがQueueに表示されるのを待っています。それはデッドロックのように見えますが、原因は実際にはQueueとは関係ありません。

+0

が、私は()のサイズ、すなわちiが100で始めた、と5000デッドロックのすべての方法は、多分明らかにサイズをキャップ100での方法よりconsistntたQueue.Queueで演奏相関(おそらく因果関係)がありますそれは何の問題? – ealeon

+0

私はあなたを信じていますが、それは私がすでに言ったことについては何も変わりません;-)それは、 'Queue'のバグよりもアプリケーションロジックの欠陥に起因する可能性が高いからです。 'Queue'コードは何年も安定していて、これまでに報告された"デッドロックバグ "がない無数のアプリケーションで使用されています。確かに、 'Queue'実装は非常に単純で、検査によって"明らかに正しい "の近くにあります。 –

+0

@ealon、誰もあなたのコードが何をしているのか推測することはできません。デッドロックの助けが必要な場合は、実行可能な最小限のコードを投稿し、他の人が自分のやっていることを見て自分自身でその動作を再現できるようにすることが最善の方法です。 –

関連する問題