在我的django视图中,我需要在子进程完成后发送电子邮件通知,因为子进程启动的脚本在后台运行一些命令,所以在脚本完成之前发送电子邮件,有没有人知道我怎么做这样做?
我的观点:
def getor(request):
# process
subprocess.call("./step1.sh", shell=True)
#send notification
current_site = get_current_site(request)
user = User.objects.values('username').order_by('id').last()
us = user['username']
subject = 'Notification of endprocess.'
message = render_to_string('notify.html', {
'us':us,
'domain':current_site.domain,
})
eml = User.objects.values('email').order_by('id').last()
toemail = eml['email']
email = EmailMessage(subject, message, to=[toemail])
email.send()
return render(request, 'endexecut.html')
答案 0 :(得分:1)
快速修复可以将电子邮件发送到函数中并创建python文件。从step1.sh
我无法理解的是,subprocess.call是一个阻塞函数。即在调用函数未完成之前,它不会转到下一行代码。
我和gevent一起去。把所有的功能都放在gevent中。在函数内部首先调用子进程并存储PID。下一个代码应该是while循环并检查PID是否存在。如果不是发送邮件并打破循环。或者睡一会儿。