私はfor
ループが3つあります。 for
ループ内では、各アイテムに対して15個のスレッドが生成されます。これらはすべて私のGUIに戻ってデータを返しますが、何が起こるのかは、for
ループが実行され、3つの項目すべてが実行され、45スレッドが生成されます。最初の項目を実行しようとしていますが、15個のスレッドが完了するまで待ってから、2番目の項目を実行します。私はjoin()
を使わずにこれをすべて行う必要があります。キューがブロックしていますメインスレッド
私はこれがqueue
によって実行できると考えましたが、ブロックすることに問題があります。私は次のことをしようとしたとき、それは15件のスレッドの第二セットに移行することはありません:
while True:
try:
data = q.get(False)
except Query.Empty():
data = None
これは、ブロッキングの問題を停止し、私のGUIは、連続して15個のスレッドのそれぞれで実行される機能で更新し続けるが、彼らに一度実行すると、それは単に終了し、for
ループを続行しません。ここでループが問題である:
def thing_1(names):
def thready():
print "Hello!"
q.put("Done")
for name in names:
print "Working on " + name
t1 = threading.Thread(target=thready)
t1.start()
# Then put 'while True' here
にwhile条件を変更される可能性があります。また、小さな追加することを検討してください(25msのを?)あなたのを避けるために、whileループの中に眠りますGUIスレッドがあまりにも多くのCPU時間を消費する。 – holdenweb
'except'部分を越えることに問題があるようです。新しい 'if'文を' print "Hello!" 'のような単純なものに置き換えても、それは印刷されません。 –
あなたのコードにインデントを混同している可能性がありますが、例のコンテキストは実際には決定するほど大きくはありません。 'while'ループは' for'と同じレベルになければなりません。 'while'ループが実際に実行していると思われる' print'呼び出しを挿入してチェックしてください。 – holdenweb