据我所知,异步网络框架/库(如扭曲、龙卷风和异步)通过实现非阻塞套接字和事件循环提供异步IO。Gevent通过猴修补标准库基本上实现了相同的功能,因此不需要通过回调和协同进行显式异步编程。
另一方面,异步任务队列,如芹菜,管理后台任务,并将这些任务分布在多个线程或机器上。我不完全理解这个过程,但它涉及到消息代理、消息和工作人员。
我的问题
哦,我不是想解决任何具体的问题,我只是想了解异步任务队列和异步IO背后的想法。
发布于 2016-04-09 15:12:25
异步IO是一种在不阻塞的情况下使用套接字(或更一般的文件描述符)的方法。这个术语是特定于一个进程甚至一个线程的。您甚至可以想象将线程与异步调用混合在一起。这将是完全好的,但有点复杂。
现在我不知道asynchronous task queue是什么意思了。IMHO只有一个任务队列,它是一个数据结构。您可以以异步或同步方式访问它。所谓“访问”,我指的是push和pop调用。它们可以在内部使用网络。
因此任务队列是一种数据结构。(A)同步IO是访问它的一种方法。这就是它的全部。
如今,asynchronous这个词被过度使用了。炒作是真的。
至于你的第二个问题:
{"task": "process_image"},您的使用者将触发一个适当的函数。正如你所看到的,这些东西没有正式的定义,你必须用一些直觉来充分理解它们。
发布于 2016-04-09 14:59:09
异步任务或芹菜任务只是异步执行的任务。特别是芹菜,任务由多个工作人员执行,从而充分利用线程、多处理以及分布式节点的好处。因此,在某种程度上,我们可以通过使用像multiprocessing或multithreading这样的库轻松地完成芹菜的工作,但是使用芹菜的好处是它可以自行处理所有的复杂性。
现在,同步IO与multithreading或multiprocessing非常不同。Aync适用于IO绑定的任务(而不是CPU)。它只使用单线程同时执行多个IO请求。Gevent或asyncio (在python 3的情况下)有助于实现这一点。
asyncio是一个更好的选择。https://stackoverflow.com/questions/36518400
复制相似问题