Python Django从另一个进程访问数据库

Python Django从另一个进程访问数据库,python,django,database,multiprocessing,Python,Django,Database,Multiprocessing,我从django应用程序创建了一个新流程。我可以从此进程在数据库中创建新记录吗? 我的代码引发异常: django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet. UPD_1 def post(self, request): v = Value('b', True) proc = Process(target=start, args=(v, request.user,

我从django应用程序创建了一个新流程。我可以从此进程在数据库中创建新记录吗? 我的代码引发异常:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
UPD_1

    def post(self, request):
       v = Value('b', True)
       proc = Process(target=start, args=(v, request.user, 
       request.data['stock'], request.data['pair'], '1111'))

       proc.start()

    def start(v, user, stock_exchange, pair, msg):
       MyModel.objects.create(user=user, stock_exchange=stock_exchange, pair=pair, date=datetime.now(), message=msg)

你需要先初始化这个项目。在执行manage.py时,通常不必执行此操作,因为它会自动执行此操作,但新流程不会为此执行此操作。因此,您需要在代码顶部添加以下内容:

import django
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()
myproject.settings
需要从运行此代码的任何位置导入,因此如果不是,您可能需要首先添加到
sys.path


完成后,您可以访问项目的模型,并使用它们访问数据库,就像您通常会做的那样。

我遇到了类似的问题(也是从视图开始的过程),最终帮助我解决了这个问题

所指出的解决方案是在分叉新进程之前关闭DB连接,这样Django可以在新进程中需要查询时重新创建连接。根据您的代码进行调整,它将是:

def post(自我,请求):
v=值('b',真)
#在此关闭数据库连接
从django导入数据库
db.connections.close_all()
#创建并分叉您的流程
proc=Process(target=start,args=(v,request.user,
request.data['stock'],request.data['pair'],'1111'))
程序启动()

调用
django.setup()
对我的情况没有帮助,在阅读链接的答案之后,可能是因为分叉进程已经共享其父进程的文件描述符等(因此django已经设置好了)。

如果正确初始化它,我想是的。通常,
manage.py
会执行所有启动操作,但在这里您需要手动执行这些操作。您可以显示您的代码吗?我正在从视图中启动一个新进程。将代码添加到proc func顶部后,什么都没有发生