python - Django View 中的异步函数

标签 python django asynchronous django-views

是否可以这样做:

def new_query(request,company_uuid,address_uuid,contact_uuid):
    mcompany = get_object_or_404(Company, uuid=company_uuid)
    if request.method == 'POST': # If the form has been submitted...
        form = forms.CompanyQueryForm(request.POST)
        if form.is_valid():
            mquery = form.save(commit = False)
            mcompany = get_object_or_404(Company, uuid = company_uuid)
            mquery.company = mcompany
            mquery.version_number = 1
            mquery.parameters = {
                                    'company':company_uuid,
                                    'address':address_uuid,
                                    'contact':contact_uuid
                                    }
            mquery.save()
            preserialise(mquery.pk, company_uuid)
            recent_update = RecentUpdate(company_query=mquery, update_type="1")
            recent_update.save()
            url = reverse('view_directory',kwargs={'company_uuid':company_uuid,
                                                                'address_uuid':address_uuid,
                                                                'contact_uuid':contact_uuid})
            return HttpResponseRedirect(url)
    else:
        form = forms.CompanyQueryForm()
    return share.output_page(request,'joinerysoft/new_query.html',{'title':unicode(u'New Company Query'),
                                                                   'form': form,
                                                                   'company':mcompany,
                                                                   'address_uuid':address_uuid,
                                                                   'contact_uuid':contact_uuid})   

preserialise(mquery.pk, company_uuid) 在后台运行而不等待返回?因为预序列化需要很长时间才能完成(超过 5 分钟),从用户的角度来看,我希望它是火而忘记的。

最佳答案

你总是可以触发一个线程:

import threading

class PreserializeThread(threading.Thread):
    def __init__(self, mquery_pk, company_uuid, *args, **kwargs):
        self.mquery_pk = mquery_pk
        self.company_uuid = company_uuid
        super(PreserializeThread, self).__init__(*args, **kwargs)

    def run(self):
        preserialize(self.mquery_pk, self.company_uuid)

然后,将代码示例中的 preserialize 替换为:

PreserializeThread(mquery.pk, company_uuid).start()

另请参阅:http://docs.python.org/library/threading.html

关于python - Django View 中的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632034/

相关文章:

python - 如何在 Django 中从 JSONField 添加/删除数据

python - Django 自定义 JSONField 的 InterfaceError

python - 让python套接字异步?

python - 使用 Python 写入和读取二进制文件时,Jupyter 中出现编码错误

Python 最小覆盖

python - 如何向 django app python 模块添加属性?

javascript - 运行在 Promise 完成后连续返回 Promise 的函数

c# - 在没有等待的情况下调用异步方法会发生什么?

python - 将类的名称传递给函数,在方法之外分配给类属性

python - 在 Pandas 1.2.0 或更新版本中通过相应的列标题查找值