私は 2 つのアプリケーションを作成しました: クライアントは SQL サーバー (10k 行) からデータを抽出し、ピクルス化されたすべての行をソケット経由で「コレクター」サーバーに送信します。サーバーはツイストを使用し(これは必須です)、すべての行を受信し、それを解凍してデータを別のSQLサーバーに保存します。
クライアントからサーバーへのデータの送信を開始するたびに、最初の 200 行 (毎回別の行)でサーバーが例外をスローします。
Traceback (most recent call last):
File "collector2.py", line 81, in dataReceived
self.count,account = pickle.loads(data)
File "/usr/lib/python2.6/pickle.py", line 1374, in loads
return Unpickler(file).load()
File "/usr/lib/python2.6/pickle.py", line 858, in load
dispatch[key](self)
File "/usr/lib/python2.6/pickle.py", line 1138, in load_pop
del self.stack[-1]
IndexError: list assignment index out of range
しかし、それは毎回同じではありません。例外 i red の印刷: Exception: pop from empty list Exception: list index out of range Exception: "'" Exception: list assignment index out of range
別の奇妙なエラーは次のとおりです: ファイル "/usr/lib/python2.6/pickle.py", line 1124, in find_class import (module) exceptions.ImportError: No module named ond'
for i in listaSAI:
crm={}
try:
crm['uid']=i[0]
except:
crm['uid']=None
try:
crm['type_cond']=i[01]
except:
crm['type_cond']=None
try:
crm['population_id']=i[2]
except:
crm['population_id']=None
try:
crm['product_id']=i[3]
except:
crm['product_id']=None
try:
crm['a_id']=i[4]
except:
crm['a_id']=None
try:
crm['status']=i[5]
except:
crm['status']=None
#time.sleep(0.001)
serialized = pickle.dumps((count,crm))
#print "sent num", count, crm
s.sendall(serialized)
count += 1
そして私のサーバー:
def dataReceived(self, data):
try:
self.count,account = pickle.loads(data)
except Exception as e:
print "Eccezione:", e
print self.count+1
print "DISAGIO", data
print traceback.print_exc()
クライアントでデータを印刷すると、すべて問題ないことがわかります。 クライアントで time.sleep(0.01) を使用して送信プロセスを遅くしようとすると、すべて問題なく、例外は発生しません。
コードをデバッグするにはどうすればよいですか?
ps exceptions.ImportError: No module named ond' が crm の "type_cond" キーを参照していると思われます。