django Thread.start()不工作thread.is_alive()返回false

时间:2015-05-26 18:16:31

标签: python django multithreading

如标题中所述,我的帖子不起作用。有关详细信息,请查看以下代码:

在回调中调用的线程

def callback(request):
    response_data = {}
    code = request.GET.get('code', None)
    if code:
         response_data['code']= code
         thr = threading.Thread(target=request_token_Api, args=(request, code, response_data))
         thr.setDaemon(True)
         thr.start()
         value =thr.is_alive()
         print("Thread is Alive:",value)
         thr.join()
         return JsonResponse(response_data)

我调用(request_token_Api)的方法进行Oauth2令牌请求调用但是当我用thred.is_alive()检查时,我在返回时得到False它应该是是的,我不知道为什么。我尝试在thread.run()之后添加thread.start,但我收到AttributeError消息。

request_token_Api METHOD

def request_token_Api(request, code, response_data):
    if request.method =='POST':
        url = "https://oauth2.api_token_request.com"
        params = {
            'grant_type': 'authorization_code',
            'client_id': API_KEY,
            'client_secret': SECRET_KEY,
            'code': code,
            'redirect_uri': URI
        }
        response = requests.get(url, params=params, verify=True)
        reponse= response.json()
        return reponse

1 个答案:

答案 0 :(得分:1)

我怀疑request_token_Api在您有机会检查之前就已退出,因此该线程已经完成。在request_token_Api中,如果方法为" POST",则只执行某些操作,但在callback中您正在查看GET的{​​{1}}属性并进行制作确定你有价值。所以可能这两件事永远不会都是request

你应该改变何时调用True的逻辑或者当你在那里时想要保持的逻辑。但是,如果您有一个有效的request_token_Api代码,则可能无法使用GET方法到达那里。