twisted

Re-using deferred objects in Twisted

前提是你 提交于 2019-11-29 16:26:07
In Twisted, it seems that a deferred object can only be used once after its callback has fired, as opposed to other "promise"-based libraries I've worked with: from twisted.internet import defer class Foo(object): def __init__(self): self.dfd = defer.Deferred() def async(self): return self.dfd @defer.inlineCallbacks def func(self): print 'Started!' result = yield self.async() print 'Stopped with result: {0}'.format(result) if __name__ == '__main__': foo = Foo() foo.func() import time time.sleep(3) foo.dfd.callback('3 seconds passed!') foo.func() On standard out, one has: $ Started! $ Stopped

Sending data received in one Twisted factory to second factory

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-29 15:38:27
问题 I am trying to write a simple program using Twisted framework and I am struggling with resolving (or even with imaging how to write it) issue I couldnt find any relevant documentation for: The main reactor uses two factories, one custom, listening for TCP connections on given port (say, 8000) and second one, to log into given IRC server and channel. On receiving data (simple, one line text) on the factory listening at 8000, I need to pass that data to second factory, so it could be then

Twisted: deferred that fires repeatedly?

蹲街弑〆低调 提交于 2019-11-29 15:09:41
问题 Deferred s are a great way to do asynchronous processing in Twisted. However, they, like the name implies, are for deferred computations, which only run and terminate once, firing the callbacks once. What if I have a repeated computation, like a button being clicked? Is there any Deferred -like object that can fire repeatedly, calling all callbacks attached to it whenever it is fired? 回答1: I've set this up for now. For my limited use case it does what I want. class RepeatedDeferred: def _

(转) Twisted : 第三部分:开始认识Twisted

北城余情 提交于 2019-11-29 13:14:45
用 twisted 的方式实现前面的内容 最终我们将使用 twisted 的方式来重新实现我们前面的异步模式客户端。不过,首先我们先稍微写点简单的 twisted 程序来认识一下 twisted 。 最最简单的 twisted 程序就是下面的代码,其在 twisted-intro 目录中的 basic-twisted/simple.py 中。 from twisted.internet import reactor reactor.run() 可以用下面的命令来运行它: python basic-twisted/simple.py 正如在第二部分所说的那样, twisted 是实现了 Reactor 模式的,因此它必然会有一个对象来代表这个 reactor 或者说是事件循环,而这正是 twisted 的核心。上面代码的第一行引入了 reactor ,第二行开始启动事件循环。 这个程序什么事情也不做。除非你通过 ctrl+c 来终止它,否则它会一直运行下去。正常情况下,我们需要给出事件循环或者文件描述符来监视 I/O (连接到某个服务器上,比如说我们那个诗歌服务器)。后面我们会来介绍这部分内容,现在这里的 reactor 被卡住了。值得注意的是,这里并不是一个在不停运行的简单循环。如果你在桌面上有个 CPU 性能查看器,可以发现这个循环体不会带来任何性能损失。实际上,这个

(转) Twisted :第二十部分 轮子中的轮子: Twisted和Erlang

青春壹個敷衍的年華 提交于 2019-11-29 13:14:31
简介 在这个系列中,有一个事实我们还没有介绍,即混合同步的"普通Python"代码与异步Twisted代码不是一个简单的任务,因为在Twisted程序中阻滞不定时间将使异步模型的优势丧失殆尽. 如果你是初次接触异步编程,那么你得到的知识看起来有一些局限.你可以在Twisted框架内使用这些新技术,而不是在更广阔的一般Python代码世界中.同时,当用Twisted工作时,你仅仅局限于那些专门为作为Twisted程序一部分所写的库,至少如果你想直接从 reactor 线程调用它们. 但是异步编程技术已经存在了很多年并且几乎不局限于Twisted.其实仅在Python中就有令人吃惊数目的异步编程模型. 搜索 一下就会看到很多. 它们在细节方面不同于Twisted,但是基本的思想(如异步I/O,将大规模数据流分割为小块处理)是一样的.所以如果你需要,或者选择,使用一个不同的框架,你将由于学习了Twisted而具备一个很好的开端. 当我们移步Python之外,同样会发现很多语言和系统要么基于要么使用了异步编程模型.你在Twisted学习到的知识将继续为你在异步编程方面开拓更广阔的领域而服务. 在这个部分,我们将简单地看一看 Erlang ,一种编程语言和运行时系统,它广泛使用异步编程概念,但是以一种独特的方式.请注意我们不是要开始写 Erlang入门

(转) Twisted :第二十一部分 惰性不是迟缓: Twisted和Haskell

眉间皱痕 提交于 2019-11-29 13:14:14
简介 在上一个部分我们对比了Twisted与 Erlang ,并将注意力集中在它们共有的一些思想上.结果表明使用Erlang也是非常简便的,因为异步I/O和反应式编程是Erlang运行时和进程模型的关键元素. 今天我们想走得更远一点,去看一看 Haskell —— 另一种功能性语言,然而与Erlang有很大不同(当然与Python也不同).这里面没有太多的平行概念,但我们仍然会发现藏在下面的异步I/O概念. F —— 功能性 虽然Erlang是功能性语言,它主要关注可靠的并发模型.Haskell,另一方面,是彻头彻尾功能性的,它无耻地利用了范畴论的概念,如 函子 和 单子 . 不要慌.我们这里不会涉及那些复杂的东西(虽然我们可以).相反,我们将关注一个Haskell的更加传统的功能性特性:惰性. 像许多功能性语言一样(除了Erlang), Haskell支持 惰性计算 . 在懒惰计算语言中,程序的文字并不过多的描述怎样计算需要计算的东西.具体实施计算的细节一般留给了编译器和运行时系统. 同时,需要进一步指出,作为惰性计算推进的运行时可能一次只计算表达式的一部分(惰性的)而不是全部.一般地,运行时只提供维持当前计算继续所需的最小计算量. 这里有一个使用Haskell head 语句的简单例子,这是一个提取列表第一个元素的函数,对于列表[1,2,3]

(转) Twisted : 第十五部分 测试诗歌

余生颓废 提交于 2019-11-29 13:13:56
简介 在我们探索Twisted的过程中写了很多代码,但目前我们却忽略了一些重要的东西 —— 测试.你也是会怀疑怎样用像 unittest 这样Python自带的同步框架测试异步代码.答案是你不能.正如我们已经发现的,同步代码和异步代码是不能混合的,至少不容易. 幸运地是,Twisted包含自己的测试框架,叫 trial ,它支持测试异步代码(当然你也可以用它测试同步代码). 我们假设你已经熟悉了 unittest 的机理和相似的测试框架,它允许你通过定义类创建测试.这个类通常是一个父类(通常叫"TestCase")的子类,类中的方法以"test"开头并被视作一个测试.框架负责发现所有的测试,一个接一个地运行它们,并伴有可选项 setUp 和 tearDown 步骤,之后报告结果. 例子 你可以在 tests/test_poetry.py 中找到一些关于测试的例子.为了确保我们所有的例子是自包含的(以便你不用担心PYTHONPAYH设置),我们将所有需要的代码拷贝到测试模块中.当然正常情况,你只需导入需要测试的模块. 这个例子既测试诗歌客户端又测试服务器,通过使用客户端从测试服务器抓取一首诗. 为了提供一个可供测试的诗歌服务器, 我们在测试案例中实现 setUp 方法: class PoetryTestCase(TestCase): def setUp(self): factory

(转) Twisted :第十六部分 Twisted 进程守护

你。 提交于 2019-11-29 13:13:30
简介 目前我们所写的服务器仅仅运行在终端窗口,结果通过 print 语句输出到屏幕.这对于开发来说已经足够,但对于产品级的部署还远远不够. 健壮的产品级服务器应该: 运行一个 daemon 进程,这个进程不与任何终端或用户会话相关.因为没有人愿意当某用户登出时服务自动关闭. 将调试和错误信息发送到一系列滚转日志文件, 或者 syslog 服务. 放弃过高的权限,比如,在运行前切换到较低权限. 保存它的 pid 文件以便管理员方便地向 daemon 发送信号 . 我们可以利用Twisted提供的 twistd 脚本获得所有以上功能. 但是首先需要稍稍修改我们的代码. IService IService 接口定义了一个可以启动或停止的服务. 这个服务究竟做了些什么? 答案是任何你喜欢的事情——这个接口只需要自提供的一些通用属性和方法,无须用户定义特定的函数. 这边有两个需要的属性: name 和 running .其中 name 属性是一个字符串,如 "fastpoetry",或者 None 如果你不想给这个服务起名字. running 属性是 Boolean 变量,如果服务成功启动,值为 True. 下面我们只涉及 IService 的某些方法, 跳过那些很显然的或者在更简单的Twisted程序中用不到的高级方法. startService 和 stopService 是

Twisted in Java

ぃ、小莉子 提交于 2019-11-29 12:19:57
问题 What is the closest Java alternative to Twisted? 回答1: Like Stephane, I would suggest you take a look at Mina. Its a framework for asynchronous network IO. It is built on top of NIO, which was mentioned earlier, and IMO hides away some of the complexity involved with Selectors,Channels,etc.. I've used Mina for a couple of projects and its pretty good, but be warned, I've found the documentation to be a little weak. And again, like Stephane mentioned, it doesn't have out of the box support for

flask twisted 结合方案

穿精又带淫゛_ 提交于 2019-11-29 10:42:55
from flask import Flask, render_template, g app = Flask( __name__ ) @app.route( " / " ) def index(): return render_template( " index.html " ) # run in under twisted through wsgi from twisted.web.wsgi import WSGIResource from twisted.web.server import Site resource = WSGIResource(reactor, reactor.getThreadPool(), app) site = Site(resource) 转载于:https://my.oschina.net/kooksee/blog/542424 来源: https://blog.csdn.net/chenming0001/article/details/100790672