扭曲反应堆在一个程序中多次启动?
是否可以在同一个程序中多次启动反应堆?假设您想要将扭曲的功能封装在一个方法内,以用于 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()
Is it possible to start the reactor more than once in the same program? Suppose you wanted to encapsulate twisted functionality inside a method, for API purposes.
For example, mymodule.py looks like this:
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 looks like this:
1 import mymodule
2
3 getGoogle()
4 getYahoo()
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是组织代码的另一种方法,利用 Twisted 的单线程特性:将要处理的所有 url 排队,启动反应器,并在每个请求完成时递减计数器。当计数器达到零时,停止反应器,它将返回结果:
Here's another way to organize your code, exploiting the single-threaded nature of Twisted: queue up all the urls you want to process, kick off the reactor, and decrement a counter when each request completes. When the counter reaches zero, stop the reactor which will return the results:
一个更简单的解决方案,不需要您管理计数器:
您应该看看 此处查看延迟 API 提供的内容,因为它将节省您大量时间并使代码更易于调试。
A more straightforward solution, which doesn't require you to manage a counter:
You should take a look here at what's provided by the deferred API because it will save you a lot of time and make your code easier to debug.