2017-03-21 5 views
0

Hier ist mein Projektordner:Ich kann Mulitprocessing nicht in meinem Django-Projekt verwenden. Warum?

\prjname 
---\appname 
---\---\subappname1 
---\---\---\__init.py 
---\---\subappname2 
---\---\---\__init.py 
---\---\view.py 
---\---\models.py 
---\---\admin.py 
---\---\__init__.py 

In models.py ich wie einige Modell definiert:

class model1(models.Model) : 
    name=models.CharField(primary_key=True, max_length=32) 

In subappname1. init Py Ich habe einige Code wie:

from appname.models import model1 
import multiprocessing 

class myclass(Object): 
    def myfun(self): 
     res = [] 
     threadargs=[(arg1,arg2),(arg3,arg4)] 
     pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) 
     for arg in threadargs: 
      res.append(pool.apply_async(self.mywork,arg)) 
     pool.close() 
     pool.join() 

     for re in res: 
      re = re.get() 
      self.myrecord(re) 

    def mywork(self,arg1,arg2): 
     #do something 
     pass 

    def myrecord(self,re): 
     model2.object.create(name=re) 

Ich denke, es ist leicht zu verstehen. Ich versuche, zeitaufwändige Arbeiten im Multiprozess durchzuführen. Allerdings, wenn ich einen solchen Code ausführen, habe ich Fehler unter:

Process SpawnPoolWorker-2: 
Traceback (most recent call last): 
    File "E:\programfile\python\lib\multiprocessing\process.py", line 249, in _bootstrap 
    self.run() 
    File "E:\programfile\python\lib\multiprocessing\process.py", line 93, in run 
    self._target(*self._args, **self._kwargs) 
    File "E:\programfile\python\lib\multiprocessing\pool.py", line 108, in worker 
    task = get() 
    File "E:\programfile\python\lib\multiprocessing\queues.py", line 345, in get 
    return _ForkingPickler.loads(res) 
    File "E:/suilong/workspace/myproject\myappname\subappname1\__init__.py", line 7, in <module> 
    from myappname.models import models 
    File "E:/suilong/workspace/myproject\myappname\models.py", line 10, in <module> 
    class model1(models.Model): 
    File "E:\programfile\python\lib\site-packages\django\db\models\base.py", line 105, in __new__ 
    app_config = apps.get_containing_app_config(module) 
    File "E:\programfile\python\lib\site-packages\django\apps\registry.py", line 237, in get_containing_app_config 
    self.check_apps_ready() 
    File "E:\programfile\python\lib\site-packages\django\apps\registry.py", line 124, in check_apps_ready 
    raise AppRegistryNotReady("Apps aren't loaded yet.") 
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. 

Hier ist meine Informationen:

OS: windows7
python: python3.6.0
django: 1.10.6
datebase: Slite3

Gibt es jemanden, der mir helfen kann? Danke vielmals.

+2

Warum möchten Sie eine Funktion in init.py schreiben? Überprüfen Sie Q ähnlich wie Ihres http://stackoverflow.com/questions/34114427/django-upgrading-to-1-9-error-appregistrynotready-apps-arent-loaded-yet & https://github.com/etianen/django -reversion/issues/481 –

Antwort

0

Sie importieren model1 in __init__.py. Aber donno, wo Sie es verwenden. Von django 1.9

All models need to be defined inside an installed application or declare an explicit app_label. Furthermore, it isn’t possible to import them before their application is loaded. In particular, it isn’t possible to import models inside the root package of an application.

Aber können Sie wie Inline-Import tun.

def mywork(self,arg1,arg2): 
    from appname.models import model1 
+0

Ich tat wie du mir gesagt hast. Dann habe ich einen neuen Fehler: * AttributeError: 'myclass' Objekt hat kein Attribut 'mywork' * – lanyuesl

+0

Ich tat, wie Sie mir sagten. Dann bekam ich einen neuen Fehler: \t Datei "E: \ programfile \ Python \ lib \ multiporcessing \ process.py", Linie 249, in _bootstrap \t self.run() \t Datei „E: \ programfile \ Python \ lib \ multiprocessing \ process.py ", Zeile 93, im Lauf \t self._target (* self._args, ** self._kwargs) \t Datei" E: \ programfile \ python \ lib \ multiprocessing \ pool.py " , Linie 108, in Arbeiter \t task = get() \t Datei "E: \ programfile \ python \ lib \ multiporcessing \ queues.py", Linie 345, in get \t return_ForkingPickler.loads (res) \t Attribute: "Myclas s 'Objekt hat kein Attribut' mywork ' – lanyuesl

+0

Es gibt einige andere Dinge, die hier nicht veröffentlicht wird. Zuallererst wird 'Object' in' class myclass' vererbt, welches nicht definiert ist – itzMEonTV

Verwandte Themen