【发布时间】:2017-11-07 04:48:06
【问题描述】:
我正在使用 django 并将数据插入数据库并下载图像。当我调用该函数时,它工作正常,但它阻塞了主线程。要在我正在使用的后台执行该过程:
views.py:
类 get_all_data(查看): def post(self, request, *args, **kwargs):
subprocess.Popen(
['python get_images.py --data=data'],
close_fds=True,
shell = True
)
但是当我打电话时:
python get_images.py(data="data")
它工作正常,但它在主线程上运行。
我该如何解决?顺便说一句,我正在使用 python 2.7。
注意:请不要推荐 Celery 。我正在寻找可以异步运行任务的东西或任何其他替代方案。
我正在使用以下代码插入我的数据库:
get_images.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 时,它不会将数据插入到我的数据库中,但如果我通过调用函数执行它,那么它将数据插入到数据库中。为什么会这样?
【问题讨论】:
-
python get_images.py(data="data")你用的是什么外壳?这绝对是bash下的语法错误。 -
Celery 是异步运行任务的方式。你为什么不想使用它?
-
@freakish 我以这种方式调用该方法,而不是使用 shell:python get_images.py(data="data")。 )只有带有 Popen 的代码在 shell 中。
-
显示
get_images.py的内容我怀疑你使用的东西只有在 Django 上下文中执行时才会运行(例如导入模型) -
@bakkal 很抱歉我在错误的文件下添加了代码。我已经更新了所有更改。请看一下:)
标签: python django subprocess