Python 为什么我需要使用异步工具来发送Django电子邮件
在使用Django时,我注意到当我发送电子邮件有一个延迟,为了克服这个问题,我不得不使用芹菜工具。所以我想知道引擎盖下到底发生了什么。为什么Django/Python需要一个异步工具来完成这项任务。我已经学习了Python中的多线程、多处理,但是如果有人能告诉我Django在不使用芹菜的情况下发送电子邮件时到底发生了什么事情。想象一下发送电子邮件就像发送请求一样,在同步上下文中,过程如下:Python 为什么我需要使用异步工具来发送Django电子邮件,python,django,multithreading,python-multiprocessing,python-multithreading,Python,Django,Multithreading,Python Multiprocessing,Python Multithreading,在使用Django时,我注意到当我发送电子邮件有一个延迟,为了克服这个问题,我不得不使用芹菜工具。所以我想知道引擎盖下到底发生了什么。为什么Django/Python需要一个异步工具来完成这项任务。我已经学习了Python中的多线程、多处理,但是如果有人能告诉我Django在不使用芹菜的情况下发送电子邮件时到底发生了什么事情。想象一下发送电子邮件就像发送请求一样,在同步上下文中,过程如下: 发送请求 等待答复 接收响应 在您等待线程不能做任何其他事情的响应的整个过程中,这是在浪费CPU周期,而
process\u image\u thumbails
任务”当你在更多的新用例中使用芹菜时,你会遇到新的问题。例如,如果有人在处理缩略图时请求缩略图,我们该怎么办?我会让你想象一下。谢谢你提供的信息。消除了很多疑问。另外,关于您提到的等待时间,是因为线程正在等待来自STMP服务器的响应,因此由于来自STMP服务器的响应延迟(网络瓶颈),线程无法执行下一个操作吗?而且,由于Python是单线程的,所以它不能生成另一个线程来处理线程1(正在等待SMTP的响应)的加载?抱歉这么晚才问这个问题。没错,它正在等待响应,而等待会消耗CPU周期。从技术上讲,您可以在python中使用多线程,并将发送电子邮件的工作推送到另一个线程。这将加快响应速度,但是,就服务器负载而言,这可能不是最有效的选择。该线程仍在同步上下文中执行请求,因此它将在等待时消耗CPU周期。如果发出100个请求,那么100个线程将空闲地等待SMTP响应。因此,使用芹菜的一个原因是从web服务器上移除负载。
{
"task": "my_app.send_email",
"args": ["Subject Line", "Hello, World! This is your email contents", "to_email@example.com", "from_email@example.com"], #
"kwargs": {} # No keyword arguments
}