Python Django在执行subprocess.Popen时未将数据插入数据库
我正在使用django,将数据插入数据库并下载图像。当我调用该函数时,它可以正常工作,但会阻塞主线程。要在后台执行我正在使用的流程: views.py: 类获取所有数据(视图): def post(自我、请求、*args、**kwargs): 但当我打电话时: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 注意:请不要推荐芹菜。我正在寻找能够异步运行任务或任何其他替代任务的东西 我正
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
)