Ich mache ein Django-Projekt und versuchen, die Rechengeschwindigkeit im Backend zu verbessern.Apps sind noch nicht geladen Ausnahme tritt bei der Verwendung von Multi-Processing in Django
Die Aufgabe ist so etwas wie eine CPU-gebundene Umwandlungsprozess
Hier meine Umgebung
- Python 3.6.1
- Django 1.10
- PostgreSQL 9,6
Und ich ist hafte mit folgenden Fehlern, wenn ich versuche, eine Computing-API durch Python-Multi-Processing-Bibliothek zu parallelisieren .
File "D:\\project\apps\converter\models\convert_manager.py", line 1, in <module>
from apps.conversion.models import Conversion
File "D:\\project\apps\conversion\models.py", line 5, in <module>
class Conversion(models.Model):
File "C:\\virtenv\lib\site-packages\django\db\models\base.py", line 105, in __new__
app_config = apps.get_containing_app_config(module)
File "C:\\virtenv\ib\site-packages\django\apps\registry.py", line 237, in get_containing_app_config
self.check_apps_ready()
File "C:\\lib\site-packages\django\apps\registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
aussehen wie jeder Prozess Import Conversion Modell und Conversion-Modell ist wie
from django.db import models
Conversion(model.Model):
conversion_name = models.CharField(max_length=63)
conversion_user = models.CharField(max_length=31)
conversion_description = models.TextField(blank=True)
...
Im Folgenden meine Beispielfunktion ist, die ich parallel wollen, jede Iteration ist unabhängig, aber werden die Daten in SQL zugreifen oder einfügen .
Class ConversionJob():
...
def run(self, p_list):
list_merge_result = []
for p in p_list:
list_result = self.Couputing_api(p)
list_merge_result.extend(list_result)
und ich versuche zu tun, ist
from multiprocessing import Pool
Class ConversionJob():
...
def run(self, p_list):
list_merge_result = []
p = Pool(process=4)
list_result = p.map(self.couputing_api, p_list)
list_merge_result.extend(list_result)
In computing_api(), es werde versuchen, aktuelle Umwandlung der Informationen zu erhalten, die und vor diesem API-Aufruf speichern in SQL abgeschlossen hat, aber diese verursachte den Fehler.
Meine Frage ist
- Warum Import Conversion Modell Apps verursacht werden, werden noch nicht fehlerfrei geladen, hatte ich viele Artikel google aber nicht wirklich meine Probleme zu lösen.
Ich kann jeden Prozess SpawnPoolWorker-X generiert sehen und versuchen, Django-Server wieder zu booten (warum?), Wird jeder Arbeiter bei den gleichen Fehlern stoppen.
Computing-API wird versuchen, auf SQL zugreifen, ich habe nicht darüber nachgedacht, wie man mit dieser Arbeit umgehen. (Teilen Sie DB-Verbindungen oder neue Verbindung in jedem Prozess)
Tun Sie dies nicht. Verwenden Sie etwas wie Sellerie, um Offline-Jobs auszuführen. –
Darf ich fragen, welche Probleme, wenn ich Multi-Processing verwende? Ich habe ein paar einfache Mathe-Berechnungen in Django ausprobiert, es ist Arbeit, aber wenn ich versuche, andere Module aufzurufen, wird es scheitern und mit diesem Fehler aufhören. –
Ich weiß, das ist ungewöhnlich für eine Web-Anwendungen (synchrone Ausführung ), aber angenommen, ich möchte nur Anwendungen auf dem lokalen Rechner (127.0.0.1) installieren und nicht als Web-Server hosten. Gibt es eine Möglichkeit, die Rechenaufgabe durch Multi-Processing zu beschleunigen? –