爬虫日记(105):Twisted:怎么样处理一个函数同步代码返回和异步对象返回

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫日记(105):Twisted:怎么样处理一个函数同步代码返回和异步对象返回相关的知识,希望对你有一定的参考价值。

在开发的过程中,会碰到这样一种情况,比如开发一个代理软件,要实现这样一个功能,当代理软件的内存里有对应的诗歌内容时,就可以直接返回给客户端,如果没有对应的诗歌内容,就需要向服务器去下载。在使用Twisted来实现这样一个函数时,就会发现有一个问题,就是当诗歌存在时,它是立即返回内容,这是同步代码的形式,而当没有诗歌时,它需要向别的服务器请求下载,这是不可能立即得到内容返回,因此是异步调用的过程。由此来看,要实现这个函数,必须把同步调用和异步调用合并到一起,那么采用Twisted又是怎么样实现的呢?

要解决这个问题,我们需要使用Deferred对象的另一方面的功能,就是可以提前触发,然后再添加响应函数,这些响应函数会立即执行,这样就可以理解为同步方式的调用了。要想理解这些内容,那么我们就使用例子来演示一下:

from twisted.internet.defer import Deferred

print("""\\
This example illustrates how deferreds can
be fired before they are returned. First we
make a new deferred, fire it, then add some
callbacks.
""")

# three sim

以上是关于爬虫日记(105):Twisted:怎么样处理一个函数同步代码返回和异步对象返回的主要内容,如果未能解决你的问题,请参考以下文章

爬虫日记(96):Twisted的通过对象进行回调

爬虫日记(91):Scrapy的ScrapyAgent类

爬虫日记(97):Twisted的更高级的抽象层

爬虫日记(99):Twisted的Deferred重新审视

爬虫日记(101):Twisted:使用Deferred重构异常代码

爬虫日记(82):Twisted的线程返回值