例如,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 – 扭曲的反应器在一个程序中多次启动?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)