[PYTHON] Ich war süchtig nach Multiprocessing + Psycopg2

Was ich machen wollte

Ich wollte den Prozess der mehrfachen Ausführung von "pd.read_sql" mit "Multiprocessing" parallelisieren.

Versions

Name Version
python 3.7.3
pandas 0.24.2
numpy 1.16.2
psycopg2-binary 2.8.4
PostgreSQL 11.5

Erfolgsbeispiel (nicht parallele Version)

Code

import multiprocessing
import pandas as pd
import numpy as np
import psycopg2

def get_connection():
	connection = psycopg2.connect(
						host='hostname',
						user='username',
						database='databasename',
						password='password')
	return connection

def function():
	for fuga in hoge:

		# fuga, pd.read_sql(sql='SELECT yyy...', con=conn)Einige Verarbeitung einschließlich

	return

if __name__ == '__main__':
	with get_connection() as conn:
		hoge = np.ravel(pd.read_sql(sql='SELECT xxx...', con=conn).to_numpy())

		function

Fehlerbeispiel

Als ich den unteren Teil des Codes im obigen Erfolgsbeispiel mit "Multiprocessing" und "Modified" -Funktion () "umschrieb, damit die Variablen entsprechend gegessen werden können, wurde ein Fehler ausgegeben.

Code

def function(i):
	fuga = hoge[i]

	# fuga, pd.read_sql(sql='SELECT yyy...', con=conn)Einige Verarbeitung einschließlich

	return

if __name__ == '__main__':
	with get_connection() as conn:
		hoge = np.ravel(pd.read_sql(sql='SELECT xxx...', con=conn).to_numpy())

		with multiprocessing.Pool(processes=64) as pool:
			for _ in pool.imap_unordered(function, range(len(hoge))):
				pass

Fehlerauszug

multiprocessing.pool.RemoteTraceback:

#Unterlassung

psycopg2.OperationalError: lost synchronization with server: got message type

#Unterlassung

psycopg2.InterfaceError: connection already closed

#Unterlassung

pandas.io.sql.DatabaseError: Execution failed on sql: SELECT yyy...
lost synchronization with server: got message type
unable to rollback

#Unterlassung

Erfolgsgeschichte

Im Code des obigen Fehlerbeispiels könnte dies vermieden werden, indem die Verbindungsinformationen in function () geschrieben werden.

Code

def function(i):
	with get_connection() as conn:
		fuga = hoge[i]

		# fuga, pd.read_sql(sql='SELECT yyy...', con=conn)Einige Verarbeitung einschließlich

	return

Hinweis

Der folgende Fehler tritt abhängig von der Anzahl der Parallelen und dem Verarbeitungsinhalt von function () auf. Er kann jedoch vermieden werden, indem export OMP_NUM_THREADS = 1 gesetzt wird.

OMP: Error #34: System unable to allocate necessary resources for OMP thread:
OMP: System error #11: Resource temporarily unavailable
OMP: Hint Try decreasing the value of OMP_NUM_THREADS.

Recommended Posts

Ich war süchtig nach Multiprocessing + Psycopg2
Ich war auf dotCloud süchtig nach Flask
Was ich süchtig nach Python Autorun war
[Einführung in json] Nein, ich war süchtig danach. .. .. ♬
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Eine Geschichte, von der ich bei np.where süchtig war
Ich war süchtig danach, logging.getLogger mit Flask 1.1.x zu versuchen
Wovon ich süchtig war, als ich Python Tornado benutzte
[IOS] GIF-Animation mit Pythonista3. Ich war süchtig danach.
Wovon ich süchtig war, als der Processing-Benutzer zu Python wechselte
[Fix] Ich war süchtig nach dem alphanumerischen Urteil über Python-Strings
Eine Geschichte, die ich süchtig danach war, Lambda von AWS Lambda anzurufen.
Die Platte, von der ich süchtig war, als ich MeCab in Heroku einsetzte
Wovon ich süchtig war, als ich ALE in Vim für Python einführte
Was ich mit json.dumps in Pythons base64-Codierung süchtig gemacht habe
Ein Hinweis, von dem ich süchtig war, als ich unter Linux einen Piepton machte
Beachten Sie, dass ich süchtig nach der fehlenden Wertinterpolation von sklearn war (Imputer)
Ein Hinweis, dem ich beim Erstellen einer Tabelle mit SQL Alchemy verfallen war
Zwei Dinge, die ich süchtig danach war, Django + Apache + Nginx unter Windows zu erstellen
Ich war süchtig danach, Tensorflow auf einer GPU mit dem NVIDIA-Treiber 440 + CUDA 10.2 auszuführen
Eine Geschichte, die mich süchtig nach dem Versuch machte, LightFM unter Amazon Linux zu installieren
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
Eine Geschichte, die ich süchtig danach war, eine Video-URL mit Tweepy zu bekommen
Ich war süchtig danach, Markdown nicht für die lange Beschreibung von Pypi verwenden zu können
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Ich war süchtig danach, Cython mit PyCharm auszuprobieren, also machen Sie sich eine Notiz
Python: Ich konnte in Lambda rekursieren
Wovon ich beim Erstellen von Webanwendungen in einer Windows-Umgebung abhängig war
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Docker x Visualization hat nicht funktioniert und ich war süchtig danach, also habe ich es zusammengefasst!
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Beachten Sie, dass ich süchtig danach war, TensowFlow einzurichten
Ich war nüchtern süchtig danach, awscli von einem in crontab registrierten Python 2.7-Skript aus aufzurufen
Beachten Sie, dass ich süchtig nach dem npm-Skript war, das in der Überprüfungsumgebung nicht übergeben wurde
Ich fing an zu analysieren
Wovon ich süchtig war, als ich Klassenvererbung und gemeinsame Tabellenvererbung in SQLAlchemy kombinierte
Ich habe versucht zu debuggen.
AttributeError: Ich war süchtig nach 'Modul'-Objekt hat kein Attribut' MyTestCase '
Python: Kann in Lambda wiederholt werden
Als ich versuchte, PIL und matplotlib in einer virtuellen Umgebung zu installieren, war ich süchtig danach.
Wovon ich süchtig war, als ich mit riesigen Dateien in einer Linux 32-Bit-Umgebung umging
Memo (März 2020), dem ich bei der Installation von Arch Linux auf dem MacBook Air 11'Early 2015 verfallen war
Eine Geschichte, nach der ich süchtig war, als ich in Go nil als Funktionsargument angab
Ich konnte die Web-App-Authentifizierung mit Flask-Login implementieren
PyTorchs Buch war schwer zu verstehen, deshalb habe ich es ergänzt
Ich war ein wenig süchtig nach der Installation von Python3.3 + mod_wsgi3.4 auf Sakura VPS (CentOS), also ein Hinweis zur Überprüfung
Als ich versuchte, mithilfe von Anforderungen in Python zu kratzen, war ich süchtig nach SSLError, also einem Workaround-Memo
Ich war süchtig nach der Bereitstellung von Google Cloud-Funktionen (der Codec 'ascii' kann das Zeichen u '\ u281b' an Position 58 nicht codieren).
Eine Geschichte über das Schreiben von AWS Lambda und ein wenig Abhängigkeit von den Standardwerten von Python-Argumenten
Ich habe versucht, PredNet zu lernen
Ich habe versucht, SVM zu organisieren.
Ich habe mit Raspberry Pi gesprochen
Beachten Sie, dass ich süchtig danach war, mit Pythons mysql.connector über eine Webanwendung auf die Datenbank zuzugreifen
Ich habe versucht, PCANet zu implementieren
Einführung in die nichtlineare Optimierung (I)
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen