Python Django在执行subprocess.Popen时未将数据插入数据库

Python Django在执行subprocess.Popen时未将数据插入数据库,python,django,subprocess,Python,Django,Subprocess,我正在使用django,将数据插入数据库并下载图像。当我调用该函数时,它可以正常工作,但会阻塞主线程。要在后台执行我正在使用的流程: views.py: 类获取所有数据(视图): def post(自我、请求、*args、**kwargs): 但当我打电话时: python get_images.py(data=“data”) 它工作正常,但在主线程上运行 我怎样才能修好它?顺便说一句,我正在使用python 2.7 注意:请不要推荐芹菜。我正在寻找能够异步运行任务或任何其他替代任务的东西 我正

我正在使用django,将数据插入数据库并下载图像。当我调用该函数时,它可以正常工作,但会阻塞主线程。要在后台执行我正在使用的流程:

views.py:

类获取所有数据(视图): def post(自我、请求、*args、**kwargs):

但当我打电话时:

python get_images.py(data=“data”)

它工作正常,但在主线程上运行

我怎样才能修好它?顺便说一句,我正在使用python 2.7

注意:请不要推荐芹菜。我正在寻找能够异步运行任务或任何其他替代任务的东西

我正在使用以下代码插入数据库:

获取图像。py:

from models import Test


        def get_image_all():

            #get data from server
            insert_to_Test(data="data")



        if __name__ == "__main__":
            import argparse
            from  .models import Test
            import django
            django.setup()

            parser = argparse.ArgumentParser()
            parser.add_argument('--from_date')
            parser.add_argument('--data')
            parser.add_argument('--execute', type=bool, default=False)
            args = parser.parse_args()
            print "args", args
            get_image_all(**vars(args))
当我调用subprocess.Popen时,它不会将数据插入到我的数据库中,但是如果我通过调用函数来执行它,那么它会将数据插入到数据库中。为什么会这样呢?

不应该吗

subprocess.Popen(
            ['python get_images.py(data=data)'],
            close_fds=True,
            shell = True
        )
  • 首先,在Django.setup()之后导入并使用Django模型
  • 其次,确保spawn进程运行的环境是正确的,主要是确保在正确的virtualenv中使用正确的Python解释器(如果使用),并确保进程在正确的工作目录中运行
示例代码:

if __name__ == "__main__":

    import argparse
    import django
    django.setup()

    from  .models import Test

    # Parse args
    # Use Django models
接下来,您需要确保
子流程
在正确的工作目录中运行,并激活Python virtualenv(如果有),大致如下所示:

subprocess.Popen(
    '/path/to/virtualenv/bin/python get_images.py --data=data', 
    cwd='/path/to/project/working_directory/',
    shell=True
)

python get_images.py(data=“data”)
您使用的是哪种shell?这肯定是bash下的语法错误。芹菜是异步运行任务的方法。为什么不想使用它?@freakish我用这种方式调用这个方法,而不是使用shell:python get_images.py(data=“data”)。)shell中只有带有Popen的代码。显示
get_images.py
的内容我怀疑您在其中使用的东西只有在Django上下文中执行时才会运行(例如导入模型)@bakkal很抱歉,我在错误的文件下添加了代码。我已更新了所有更改。请看一看:)我现在收到这个错误:raise AppRegistryNotReady(“应用程序尚未加载”))django.core.exceptions.AppRegistryNotReady:应用程序尚未加载。
subprocess.Popen(
    '/path/to/virtualenv/bin/python get_images.py --data=data', 
    cwd='/path/to/project/working_directory/',
    shell=True
)