实现多线程时无法在Django中处理异常

时间:2018-10-27 08:26:45

标签: python django python-3.x

views.py:

from threading import Thread

class PoliceJobs:
    def call_police_defence_jobs(request):
        job         = PoliceDefenceJobs.police_jobs(request)
        sleep(0.5)
        job_details = PoliceDefenceJobDetails.police_defence_job_details(request)
        message = call_all(job,job_details)
        return HttpResponse(message)

    def call_statewise_police_jobs(request):
        job         = PoliceDefenceJobs.statewise_police_jobs(request)
        sleep(0.5)
        job_details = PoliceDefenceJobDetails.statewise_police_job_details(request)
        message = call_all(job,job_details)
        return HttpResponse(message)

def police_jobs(request):
    try:
        t1 = Thread(target=PoliceJobs.call_police_defence_jobs,args=[request])
        t2 = Thread(target=PoliceJobs.call_statewise_police_jobs,args=[request])
        t1.start()
        t2.start()
        t1.join()
        t2.join()
        return HttpResponse("success")
    except:
        return HttpResponse("error")

urls.py

from django.urls import path
from .views import police_jobs

urlpatterns = [
    path('finish_police_jobs/', police_jobs),
]

外壳错误:

Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/home/soubhagya/Desktop/carrier-circle/backend/finalize/views.py", line 840, in call_police_defence_jobs
    job         = PoliceDefenceJobs.police_jobs(request)
AttributeError: type object 'PoliceDefenceJobs' has no attribute 'police_jobs'

在PoliceJobs类中,我将函数名称更改为PoliceDefenceJobs.police_jobs,该名称不存在,不会出错。

在这里我犯了错误并通过添加除了block来处理它,但是 它仍在控制台中显示错误,但在浏览器中未显示。 在浏览器中,虽然有例外,但显示成功。

1 个答案:

答案 0 :(得分:0)

线程中的异常不会传播到创建它们的线程。解决方法,请参见Catch a thread's exception in the caller thread in Python