Ich habe eine for-Schleife, die über ein Array iteriert. Für jedes Element im Array ruft es eine Funktion auf, die django-rest-framework-Anfragen stellt. Jeder Funktionsaufruf ist unabhängig von den anderen.optimieren Schleife machen Django-Rest-Framework Anfragen
Wenn das Array 25 Elemente enthält, dauert es derzeit 30 Sekunden. Ich versuche die Gesamtzeit auf weniger als 10 Sekunden zu reduzieren.
Die Hälfte der in der Funktion verbrachten Zeit wird von DRF-Anfragen belegt. Wäre es sinnvoll, die for-Schleife durch einen Multiprocessing-Pool zu ersetzen? Wenn ja, wie kann ich sicherstellen, dass jeder Prozess Anforderungen über eine separate Verbindung mit dem Anforderungspaket stellt?
Ich habe gerade versucht zu ersetzen:
for scenario_id in scenario_ids: step_scenario_partial(scenario_id)
mit:
pool = Pool(processes=2) pool.map(step_scenario_partial, scenario_ids)
die aufgrund OpenSSL.SSL.Error fehlgeschlagen: [('SSL-Routinen', 'ssl3_get_record', ‚Entschlüsselung fehlgeschlagen ist oder bad record mac ')]
Laut this war der Fehler darauf zurückzuführen, dass dieselbe SSL-Verbindung in mehreren Prozessen erneut verwendet wurde.
Werden Threads Fehler aufgrund der Wiederverwendung derselben SSL-Verbindung vermeiden, da die Threads nie gleichzeitig ausgeführt werden? – softweave
Haben Ihren Vorschlag ausprobiert. Die Cumtime ging ohne Fehler auf 8,3 Sekunden zurück. – softweave