使用以下技术实现异步的方法的概念差异是什么?我的主要搜索是Django,但我正在寻找一个描述该技术背后的想法的概念性答案。
我在网上找到了关于大多数这些方法的教程,但是他们没有解释背后的概念,只是技术实现。
答案 0 :(得分:2)
异步编程可能很难让人满意。基本思想是绕过阻止IO的一种方法。阻止IO就是从写入查询数据库的文件,查询REST API,以及在等待其他事情发生时中断应用程序处理流程的任何事情。
例如,假设您构建一个Gallery应用程序,用户可以上传大型高清分辨率图像来炫耀。但是你需要制作用户上传的大图像的各种副本,缩略图,较小的分辨率版本等。要做到这一点,需要一点阻止IO。您需要压缩图像并且非常密集,一旦压缩,您需要将这些图像写入磁盘,之后您可能需要将所有这些信息存储在数据库中。要在一个请求中执行此操作,将导致用户的性能非常缓慢,老实说,您的后端进程可能会在完成所需的所有任务之前超时。它也不能很好地扩展。解决这个问题的一种方法是使用异步编程。一旦用户上传完成,您就可以向其他应用程序发出各种信号,等待他们有机会压缩图像或将数据写入数据库。一旦发出信号,这些后台进程就会起作用,而您的用户不必等待长时间的请求完成,而是可以继续浏览网站,喝咖啡并在缩略图制作完成后收到通知等。
在上面的例子中,我将使用Celery,RabbitMQ和SocketIO(或者可能是TornadIO)来实现它。一旦用户上传完成,我就会开始芹菜任务,芹菜使用RabbitMQ(我更喜欢Redis)来管理任务,你可以让10,20,30名芹菜工人在后台处理这些图片上传。一旦芹菜完成它的工作,它就会向Socket服务器发送一条消息,用于处理用户浏览器连接的Web套接字。这将实时向用户发送通知,告知他们上传的新图像现在已准备好与世界共享
这是围绕异步事件驱动编程的真正基本示例。无论如何,我最好理解它。其他人请指正。
我希望这会有所帮助。 :)