名前の種類はそれをすべて言います。私はこのプログラムをPython2.7で作成しており、スレッド化されたキューを利用して大量のWebリクエストを作成しようとしています。問題は次のとおりです。2つの異なるキューが必要です。1つはスレッド化された要求を処理し、もう1つは応答を処理します。プログラムに「queue」という名前ではないキューがある場合、たとえば、最初のキューに「input_q」という名前を付けたい場合、プログラムはクラッシュし、動作を拒否します。これは私にはまったく意味がありません。以下のコードでは、インポートされたすべてのカスタムモジュールが正常に機能します(少なくとも、それらは独立して実行され、すべての単体テストに合格し、問題の原因である可能性がある理由はわかりません)。
また、診断ステートメントを介して、スレッドプールを生成する直前にクラッシュすることを確認しました。
前もって感謝します。
編集:クラッシュはここでは間違った用語かもしれません。実際には止まります。30分待っても、元のプログラムが30秒未満で実行された場合、プログラムは実行されませんでした。toCheckを印刷するように指示したところ、リストの途中までしか表示されず、エントリの途中で停止し、何も実行されませんでした。
EDIT2:みんなの時間を無駄にしてすみません、私はこの投稿を忘れました。誰かが私のカスタムモジュールの1つを変更しました(スレッドチェック)。モジュールを初期化してから、プログラムの残りの部分と一緒に陽気な方法で実行していたようです。プログラムが計算の途中であったとき、スレッドチェックは初期化後にクラッシュしていました、そしてそのクラッシュはそれですべてをダウンさせていました。
コード:
from binMod import binExtract
from grabZip import grabZip
import random
import Queue
import time
import threading
import urllib2
from threadCheck import threadUrl
import datetime
queue = Queue.Queue()
#output_q = Queue.Queue()
#input_q = Queue.Queue()
#output = queue
p=90
qb = 22130167533
url = grabZip(qb)
logFile = "log.txt"
metaC = url.grabMetacell()
toCheck = []
print metaC[0]['images']
print "beginning random selection"
for i in range(4):
if (len(metaC[i]['images'])>0):
print metaC[i]['images'][0]
for j in range(len(metaC[i]['images'])):
chance = random.randint(0, 100)
if chance <= p:
toCheck.append(metaC[i]['images'][j]['resolution 7 url'])
print "Spawning threads..."
for i in range(20):
t = threadUrl(queue)
t.setDaemon(True)
t.start()
print "initializing queue..."
for i in range(len(toCheck)):
queue.put(toCheck[i])
queue.join()
#input_q.join()
output = open(logFile, 'a')
done = datetime.datetime.now()
results = "\n %s \t %s \t %s \t %s"%(done, qb, good, bad)
output.write(results)