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

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫日记(82):Twisted的线程返回值相关的知识,希望对你有一定的参考价值。

前面学习callInThread 和callFromThread函数,callInThread函数允许把一些代码交给其它线程工作,callFromThread函数允许其它线程把一些代码交给reactor线程运行。这样可以解决大部分没有返回值的函数执行,如果需要让线程执行之后还有返回值怎么呢?Twisted提供了两个函数:deferToThread 和blockingCallFromThread。

 

如果你想从一些阻塞代码里返回结果给reactor线程,就可以采用deferToThread来代替callInThread函数。下面使用例子来演示:

#爬虫日记-蔡军生(qq:9073204)

#https://mysoft.blog.csdn.net/

#2021-05-25



from __future__ import print_function

from twisted.internet import reactor, threads



import time



def doLongCalculation():

    time.sleep(3)

    return 3



def printResult(x):

    print(x)



# run method in thread and get result as defer.Deferred

d = threads.deferToThread(doLongCalculation)

d.addCallback(printResult)

reactor.run()

在这个例子里,初始化线程调用threads.deferToThread函数,把doLongCalculation函数

以上是关于爬虫日记(82):Twisted的线程返回值的主要内容,如果未能解决你的问题,请参考以下文章

爬虫日记(93):Twisted的设计模型

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

爬虫日记(79):Twisted的延时机制

爬虫日记(108):Twisted:使用后悔药

爬虫日记(94):Twisted的reactor设计来源

爬虫日记(106):Twisted:单元测试怎么样编写