我遇到了这个问题,我想返回一些东西,然后再调用另一个函数(在python中)
这是我当前的代码:
def new_user(request):
'''Takes a request and enters it in the database IF that wallet id is not in the database! '''
data = request.body
if data != '':
user_info = eval(data)
if type(user_info) != type({}):
... more code here ...
send_email(vCode)
return HttpResponse(response)
我想在返回响应后调用send_email。我在这里尝试了一些方法: -在另一个函数中同时调用new_user和send_email,但是我需要返回某种HttpResponse(所以我不能在不返回它的情况下调用new_user ...),所以这不起作用 -尝试产生请求,在产生之后无法调用其他函数 -尝试线程,有类似的问题 -目前正在尝试asyncio,但与此同时我也遇到了问题,我还能做些其他事情吗?
答案 0 :(得分:1)
我知道实现此目标的唯一方法是在另一个线程中运行该函数。您说您已经尝试过,但是没有成功,但是没有提供您尝试过的例子。以下是应正常工作的代码示例
import threading
...
def new_user(request):
'''Takes a request and enters it in the database IF that wallet id is not in the database! '''
data = request.body
if data != '':
user_info = eval(data)
if type(user_info) != type({}):
... more code here ...
task = threading.Thread(target=send_email, args=(vCode,))
task.daemon = True
task.start()
return HttpResponse(response)
注意:您需要将此线程标记为daemon
,以便python在关闭之前不会等待其加入。由于您正在将其分解为在代码完成之后运行,因此这是必需的步骤。
另一种选择是使用某种任务队列并将其发送以进行处理,您也说您正在尝试使用asyncio
。在较大的应用程序中,这将是更好的选择。
答案 1 :(得分:0)
功能Return
之后,您将无法在同一视图中执行额外的代码。如果您的电子邮件必须在retunr
之后发送,则可以将重定向return redirect(new_view_to_send_email)
从您的函数返回到发送电子邮件的新函数。
答案 2 :(得分:-2)
您可以使用lamda
UINavigationController