Ich habe einige Dokumente, die ich von mongodb holen und auf Memcache setzen muss. Hier ist der CodeVerbindung zurückgesetzt von Peer pymongo
import memcache
from pymongo import MongoClient
db = mongo_client.job_db.JobParsedData
jobs = db.find().sort("JobId", 1)
def set_to_memcache_raw(jobs):
print("Setting raw message to memcache")
count = 0
for item in jobs:
job_id = item.get('JobId')
job_details = item.get('JobDetails')
if job_id.strip():
count += 1
memcache_obj.set(job_id, job_details, time=72000)
if count % 1000 == 0:
print("Inserted {} keys in memcache".format(count))
if count >= 1000000:
break
Aber nach einiger ungerade Anzahl von Iterationen der Code throw dieser Fehler -
Traceback (most recent call last):
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/pool.py", line 450, in receive_message
self.sock, operation, request_id, self.max_message_size)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/network.py", line 137, in receive_message
header = _receive_data_on_socket(sock, 16)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/network.py", line 164, in _receive_data_on_socket
chunk = sock.recv(length)
ConnectionResetError: [Errno 104] Connection reset by peer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "memcache-poc.py", line 56, in <module>
elapsed = time.time() - t0
File "memcache-poc.py", line 52, in main
jobs = db.find(query)
File "memcache-poc.py", line 17, in set_to_memcache_raw
print("Setting raw message to memcache")
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/cursor.py", line 1114, in next
if len(self.__data) or self._refresh():
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/cursor.py", line 1056, in _refresh
self.__max_await_time_ms))
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/cursor.py", line 873, in __send_message
**kwargs)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/mongo_client.py", line 905, in _send_message_with_response
exhaust)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/mongo_client.py", line 916, in _reset_on_error
return func(*args, **kwargs)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/server.py", line 136, in send_message_with_response
response_data = sock_info.receive_message(1, request_id)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/pool.py", line 452, in receive_message
self._raise_connection_failure(error)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/pool.py", line 550, in _raise_connection_failure
_raise_connection_failure(self.address, error)
File "/home/dimension/.virtualenvs/docparser/lib/python3.5/site-packages/pymongo/pool.py", line 211, in _raise_connection_failure
raise AutoReconnect(msg)
pymongo.errors.AutoReconnect: xxx.xxx.xxx.xxx:27017: [Errno 104] Connection reset by peer
Ich habe durch Links gegangen wie
why-does-pymongo-throw-autoreconnect
Sie ist keine Frage der Steckdose Inaktivität in dem obigen Code als meine Jobs Objekt ist ein Iterator und jedes Mal, next() auf diesem Objekt aufgerufen wird, wird das nächste Dokument (von Mongo selbst)
Ich holt habe mongodb in der Azure-Cloud installiert und mein TCP-Status für die Instanz ist 7200 Sekunden lang am Leben. Ich erhalte diese Figur durch diesen Befehl Brennen
sysctl net.ipv4.tcp_keepalive_time
7200
Do einen Versuch cacth Block über die for-Schleife in diesem Fall hilft
Es tut nicht weh, sich selbst zu versuchen, als zu fragen. – Saleem
können Sie schreiben, bei welcher genauen Zeile Sie die Ausnahme erhalten? und wenn Sie mehrere Elemente in jeder Schleife einfügen, warum erstellen Sie nicht eine Liste von Elementen einfügen und sie versuchen, sie auf einmal einfügen (das ist nicht im Zusammenhang mit oben genannten Fehler, nur ein Vorschlag) – Darpan
Der Code wirft Ausnahme bei "für Artikel in Jobs:" Zeile. Auch Memcache unterstützt nicht das Setzen mehrerer Schlüssel gleichzeitig, also muss ich in jedem Loop einen Eintrag in Memcache schreiben. –