我在Django中有个函数视图.py看起来像这样。在
def process(request):
form = ProcessForm(request.POST, request.FILES)
if form.is_valid():
instance = form.save(commit=False)
instance.requested_by = request.user
instance.save()
t = threading.Thread(target=utils.background_match, args=(instance,), kwargs={})
t.setDaemon(True)
t.start()
return HttpResponseRedirect(reverse('mart:processing'))
这里,我尝试在提交ProcessForm时在单独的线程中调用函数“background_match”。因为这个线程需要一些时间来完成,所以我将用户重定向到另一个名为'集市:加工'. 在
我面临的问题是,它在我的本地机器上运行良好,但在生产服务器(awsec2实例)上不起作用。线程根本没有启动。在background_match函数中有一个for循环,它不会向前移动。在
但是,如果我刷新(CTRL+R)'集市:加工'页,它确实会移动1到2个迭代。因此,对于一个包含1000次迭代的完整循环,我需要刷新页面1000次。如果在100次迭代之后,我不刷新页面,它会在那一点卡住,并且不会移动到第101次迭代。请帮忙!在
错误的架构。Django和其他web应用程序应该会产生这样的线程。正确的方法是使用任务队列创建异步任务。django最流行的任务队列恰好是Celery。在
mart:processing
页应该检查异步结果,以确定任务是否已完成。草图如下。在在下一页
^{pr2}$相关问题 更多 >
编程相关推荐