キュー/マルチプロセッシングを使用して奇妙なエラーが発生しました。私は基本的にリストを取り、それを解析する関数を持っています。マルチプロセッシングキューモジュール経由で関数にリストを渡す際にエラーが発生しました
私はこれを何度もやらなければならないので、私はそれをコアに広げてキューをセットアップしようとしましたが、動作しません。ここに私のコード:
# Establish communication queues
tasks = multiprocessing.Queue()
# Start consumers
num_consumers = multiprocessing.cpu_count() * 2
print 'Creating %d consumers' % num_consumers
worker = [ rules(tasks)
for i in xrange(num_consumers) ]
for w in consumers:
w.start()
def loadGraph(dayCurrent, day2Previous):
for dayCurrentCount in graph[dayCurrent]:
dayCurrentValue = graph[dayCurrent][dayCurrentCount]
for day1Count in graph[day2Previous]:
day1Value = graph[day2Previous][day1Count]
rulesDataToPass = [day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous]
tasks.put(rulesDataToPass)
tasks.close()
tasks.join_thread()
私は間違っているのか分かりません。キューを使用せずに正常に動作します。問題は私の関数が複数の変数を実行する必要があることです(個別に送信する前に、すべてまとめてリストにまとめてキューに入れることにしました)。
助けてください!
ありがとうございます!
UPDATE:要求されたように、ここでトレースバックである:
Traceback (most recent call last):
File "/Users/lostsoul/Dropbox/code/learning/python/game.py", line 213, in <module>
for i in xrange(num_consumers) ]
File "Users/lostsoul/Dropbox/code/learning/python/game.py", line 191, in rules
day1Count = dict[0]
TypeError: 'Queue' object does not support indexing
基本的に、私は「ルール」と呼ばれている関数にデータを送信している、辞書は、次にday1Count = dictのように解析される[0]、 ..day1value dict [1] ...など。私は基本的に2つの辞書を互いに比較しようとしています。キューはすべてのエントリをまとめてネストされたforループからのものです(キューに追加すると、すべてのCPU上で処理されます.1つは個別に動作しますが、1つのCPUを使用して15分かかる)。
UPDATE2:ここにルール機能があります。それは簡単です。基本的にはこれが正常に動作しないとキュー(ルールエンジンのその私のバージョン)
def rules(dict):
day1Count = dict[0]
day1Value = dict[1]
dayCurrentCount = dict[2]
dayCurrentValue = dict[3]
dayCurrent = dict[4]
day2Previous = dict[5]
exactSame(day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous)
withinFivePercentChange(day1Count, day1Value, dayCurrentCount, dayCurrentValue, dayCurrent, day2Previous)
deleteNonEdgeNodes(dayCurrentCount, dayCurrentValue, dayCurrent)
の値をとり、その後、他の関数に渡します。
は、あなたが実行し得る例外メッセージとトレースバックを含むことができ、スクリプト? – chown
@chown Hey ..コメントの感謝。メッセージで質問を更新しました。希望が役立ちます。 – Lostsoul
私たちは 'rules'の本体を見る必要があります。あなたに渡されているものにインデックスをつけようとしているようですが、これはうまくいきません。 –