2021SC@SDUSC
1 Twisted
Scrapy 基于 Twisted,所以除了要有一定的 Python 基础外,还要对 Twisted 有一些了解。
我们可以将 Twisted 和 Asyncio 类比,它们都是为了支持协程而诞生的,只是前者比后者出现的更早。这 2 个技术实现的核心都是事件循环,当程序执行到某个耗时的 IO 操作时,程序的执行权限会被退回给事件循环,事件循环会检测其它准备就绪的协程,然后将执行权限交给它,当之前的协程 IO 操作完毕后,事件循环会将执行权限转给它,继续后面的操作。这样,就能在单线程内实现并发,作用和多线程类似,只是比多线程更轻量。事件循环在 Asyncio 中被叫做 event_loop,在 Twisted 中叫做 reactor。我们看一些简单的例子
1.1 Schedule
from twisted.internet import reactor
def f(s):
print('this will run 3.5 seconds after it was scheduled: %s' % s)
reactor.callLater(3.5, f, 'hello, world')
# f() will only be called if the event loop is started.
reactor.run()
reactor.callLater 会将某个任务加入到事件循环,并设置好多少秒后开始执行,当然要将事件循环启动后才会有作用。
from twisted.internet import reactor, task
def f(s):
print(s)
loop = task.LoopingCall(f, 'hello, world')
# Start looping every 1 second.
loop.

最低0.47元/天 解锁文章
3861

被折叠的 条评论
为什么被折叠?



