python – 扭曲的反应器在一个程序中多次启动?

python – 扭曲的反应器在一个程序中多次启动?,第1张

概述是否可以在同一程序中多次启动反应堆?假设您希望将扭曲的功能封装在方法中,以用于API目的. 例如,mymodule.py看起来像这样: 1 from twisted.web.client import getPage 2 from twisted.internet import reactor 3 4 def _result(r): 5 print r 6 r 是否可以在同一程序中多次启动反应堆?假设您希望将扭曲的功能封装在方法中,以用于API目的.

例如,mymodule.py看起来像这样:

1 from twisted.web.clIEnt import getPage  2 from twisted.internet import reactor  3   4 def _result(r):  5     print r  6     reactor.stop()  7   8 def _error(e):  9     print e 10     reactor.stop() 11  12 def getGoogle(): 13     d = getPage('http://www.Google.com') 14     d.addCallbacks(_result,_error) 15     reactor.run() 16  17 def getYahoo(): 18     d = getPage('http://www.yahoo.com') 19     d.addCallbacks(_result,_error) 20     reactor.run() 21

main.py看起来像这样:

1 import mymodule  2   3 getGoogle()  4 getYahoo()
解决方法 这是组织代码的另一种方法,利用Twisted的单线程特性:排队所有要处理的URL,启动反应堆,并在每个请求完成时递减计数器.当计数器达到零时,停止反应器,返回结果:

from twisted.web.clIEnt import getPagefrom twisted.internet import reactorclass Getter(object):    def __init__(self):        self._sequence = 0        self._results = []        self._errors = []    def add(self,url):        d = getPage(url)        d.addCallbacks(self._on_success,self._on_error)        d.addCallback(self._on_finish)        self._sequence += 1    def _on_finish(self,*narg):        self._sequence -= 1        if not self._sequence:            reactor.stop()    _on_success = lambda self,*res: self._results.append(res)    _on_error = lambda self,*err: self._errors.append(err)    def run(self):        reactor.run()        return self._results,self._errorsg = Getter()for url in ('http://www.Google.com','http://www.yahoo.com','IDontexist'):    g.add(url)results,errors = g.run()print resultsprint errors
总结

以上是内存溢出为你收集整理的python – 扭曲的反应器在一个程序中多次启动?全部内容,希望文章能够帮你解决python – 扭曲的反应器在一个程序中多次启动?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1194519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存