- 浏览: 303922 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (69)
- python (31)
- android (1)
- 软件安装 (3)
- 运维监控 (5)
- pycurl (1)
- RFC (0)
- RFC,IRC,翻译 (1)
- ubuntu 打开 22端口 (1)
- redis (3)
- 缓存 (1)
- 多进程,共享数据,通信, (1)
- django (4)
- cookie (1)
- session (1)
- nodejs npm (1)
- mongodb (2)
- tornado (2)
- 异步 (1)
- seo (0)
- seo,错误,笔记 (1)
- sysv-rc-conf (1)
- ubuntu (2)
- 开机启动 (1)
- supervisor (1)
- 进程 (1)
- twitter tweepy (1)
- Bootstrap (1)
- Bootstrap-maxlength (1)
- 微信 (1)
- 公共号 (1)
- 框架 (1)
- mac,virtualbox,xp (1)
- beef (1)
- ruby1.8 (1)
- ruby1.9 (1)
- rvm (1)
- subline (1)
- egret (1)
- ssl (1)
最新评论
-
koreyoshi:
那要是周排名月排名呢
redis set轻松做排行榜应用 -
xuddk727:
仁兄能否将affinity_0.1.0发我一份?在我这该网站无 ...
python 绑定进程在某个cpu上执行-affinity -
mimicom:
wifi 调试 adb shell 的话 是 transpor ...
android adb shell 笔记 -
郭玉成:
一定要有SGMLParser.__init__(self) ...
用python解析html--SGMLParser -
jakejone:
支持一下,我刚开始学python,感觉不错,就是文档太少了。
python开发环境Eclipse+pydev字体和颜色设置方法(另附pydev安装方法)
翻译by:pako
email/gtalk:zealzpc@gtalk.com
目标:
介绍twisted Application 结构
介绍如何使用.tac文件和twistd部署twisted application
介绍twisted services
概要
Twisted application框架负责启动和停止你的应用程序。使用application框架中已经实现了的那些工具可以使你方便的实现 daemo,logging,选择一个reactor等功能,而不用为此再做那些枯燥的工作。
Twisted applications 最主要的工具是一个命令行的组件叫twistd。Twistd 实现了跨平台,在运行Twisted applications时强烈推荐使用它。
Twisted Application 框架最重要的组件就是 twisted.application.service.Application类,代表了你的应用程序。当然,Application类不会提供所有你想实现的功能。事实上,Application类更像一个services的容器,里面可以包容若干个service。你所要做的就是用过Application这个框架来实现里面的一个个services。
对于“service”,我们是指那些可以启动和停止的程序。通常来说service包括web servers ,FTP servers,和ssh 客户端。你的Application对象可以容纳许多service,通过IServiceCollections类甚至可以是一个有结构层次的service。
下面是一个简单的Application结构例子,它实现了一个echo tcp服务跑在7001端口上。
from twisted.application import internet, service from somemodule import EchoFactory port = 7001 factory = EchoFactory() # 下面是最重要的一行,没有Application类,就无法欲行 application = service.Application("echo") # 创建Application对象 echoService = internet.TCPServer(port, factory) # 创建echo 服务 # 将echo服务放置到application里面 echoService.setServiceParent(application)
这个简单的例子的结构:
application
|
`- echoService
更复杂的层次结构可以通过IServiceCollection来实现。你将会喜欢上这样去管理一个依赖其他服务的服务。比如,一个Twisted Application代理希望他的服务总是在相应的客户端启动后启动。
使用Application
twistd and tac
twistd和tac文件
对于处理启动和配置你的Twisted application,Twisted Application框架使用.tac文件。.tac文件也是python文件,它
下面这个简单的例子是一个.tac文件
""" This is an example .tac file which starts a webserver on port 8080 and serves files from the current working directory. The important part of this, the part that makes it a .tac file, is the final root-level section, which sets up the object called 'application' which twistd will look for """ import os from twisted.application import service, internet from twisted.web import static, server def getWebService(): """ Return a service suitable for creating an application object. This service is a simple web server that serves files on port 8080 from underneath the current working directory. """ #创建一个resource对象,用来服务静态文件 fileServer = server.Site(static.File(os.getcwd())) return internet.TCPServer(8080, fileServer) # this is the core part of any tac file, the creation of the root-level # application object application = service.Application("Demo application") # attach the service to its parent application service = getWebService() service.setServiceParent(application)
#你可以用过 twistd -ny service.tac 运行这个文件
Twistd是一个用来执行 Twisted applications 的.tac文件的程序。运行它最简单的方式是 通过twistd 命令 加变量 -y 和一个tac文件名。比如你可以运行上面的server通过 twistd -y service.tac 命令。
在tac应用中定制 twistd 日志
定制日志的行为可以在.tac文件中通过api来访问。ILogObserver组件可以被设置在一个Application中,提供给twistd使用。
下面是如何使用DailyLogFile的例子,它会每天记录一次。
from twisted.application.service import Application from twisted.python.log import ILogObserver, FileLogObserver from twisted.python.logfile import DailyLogFile application = Application("myapp") logfile = DailyLogFile("my.log", "/tmp") application.setComponent(ILogObserver, FileLogObserver(logfile).emit)
invoking twistd -y my.tac will create a log file at /tmp/my.log.
执行 twistd -y my.tac命令时会创建一个日志文件/tmp/my.log。
Twisted 提供的service
Twisted提供了一些你可能需要的service
每一个Twisted提供了的service(TimerService除外)都会有 connect 或 listen方法在reactor里,并且这些service和reactor都使用一样的方法。
connect方法是提供给客户端使用,listen方法提供给服务端。比如,TCPServer相应的使用 reactor.listenTCP监听客户端的连接 而 TCPClient使用 reactor.connectTCP去连接服务器端。
TCPServer
TCPClient
Services which allow you to make connections and listen for connections on TCP ports.
listenTCP
connectTCP
允许你在TCP端口上连接和监听连接。
UNIXServer
UNIXClient
Services which listen and make connections over UNIX sockets.
listenUNIX
connectUNIX
一个通过UNIX sockets 连接和监听连接的service。
SSLServer
SSLClient
Services which allow you to make SSL connections and run SSL servers.
listenSSL
connectSSL
一个通过SSL 连接和监听连接的service。
UDPServer
UDPClient
Services which allow you to send and receive data over UDP
listenUDP
允许你通过UDP发送和接受数据。
UNIXDatagramServer
UNIXDatagramClient
Services which send and receive data over UNIX datagram sockets.
listenUNIXDatagram
connectUNIXDatagram
允许你通过UNIX datagram sockets发送和接受数据。
MulticastServer
A server for UDP socket methods that support multicast.
listenMulticast
一个UDP socket service,支持多点广播。
TimerService
A service to periodically call a function.
一个server周期性的执行一个方法。
IServiceCollection 对象里面包含着IService对象(上面提到的都是 IService对象)。IService可以被添加到IServiceCollection对象中 通过setServiceParent方法,通过disownServiceParent去除一个IService对象。
from twisted.application import internet, service from twisted.names import server, dns, hosts port = 53 # Create a MultiService, and hook up a TCPServer and a UDPServer to it as # children. dnsService = service.MultiService() hostsResolver = hosts.Resolver('/etc/hosts') tcpFactory = server.DNSServerFactory([hostsResolver]) internet.TCPServer(port, tcpFactory).setServiceParent(dnsService) udpFactory = dns.DNSDatagramProtocol(tcpFactory) internet.UDPServer(port, udpFactory).setServiceParent(dnsService) # Create an application as normal application = service.Application("DNSExample") # Connect our MultiService to the application, just like a normal service. dnsService.setServiceParent(application)
发表评论
-
一句话反射shell
2014-12-28 16:13 2856通过一句话反射一个shell 首先你在自己的及其上起 ... -
微信公共平台框架-python(支持多账号)
2014-04-15 15:39 4065email:zealzpc@gmail.com 因 ... -
进程管理工具 supervisor
2013-03-14 12:01 1648经常在服务器上会启动很多程序,然后重启一下又要一个个重新启 ... -
tornado 问题小计
2013-01-29 12:47 13551 tornaod在ubuntu 的安装目录 /usr/ ... -
django1.4 问题记录
2013-01-28 13:59 8651 ImportError: Settings canno ... -
聊聊 tornado 的异步回调
2013-01-17 10:47 13989异步回调程序的原理和写法我不就不介绍了,因为我主要是来吐槽下 ... -
小谈django 的 cookie和session
2012-11-12 00:03 9931本文针对django1.4 周末小闲在家研究了下dja ... -
小记 django 1.4的变化
2012-11-06 23:23 1550最近因为公司游戏功能逐渐到了收尾阶段也算空下来点了,就索性想尝 ... -
使用redisco轻松将python内置数据类型存入redis内
2012-07-26 23:12 9613我在之前的 <python使 ... -
python使用redis 神器 ---redisco(一)
2012-07-07 22:42 28590很久没认真推荐过东西了,实在是人懒也没以前那么有心思去研究 ... -
redis set轻松做排行榜应用
2012-05-31 20:23 15463Author:pako email:zealzpc@gmai ... -
永久修改python默认的字符编码为utf-8
2011-08-19 14:06 17666这个修改说来简单,其实不同的系统,修改起来还真不一样。下面来罗 ... -
ubuntu 上安装pycurl
2011-07-12 11:20 3091我 是 在 8。04上 安装的装了 easy_installl ... -
用twisted创建tcp socket长链接amf server服务
2011-06-17 13:45 6782#Author:pako #Email/gta ... -
twisted:调用deferredlist多线程并发执行任务然后收集结果
2011-06-09 10:54 4476最近想通过twisted实现多线程并发去执行一件耗时的事,然后 ... -
对twisted 中deferred异步的理解
2011-03-29 15:38 4584最近小试了下twisted,还是发现用起来挺方便的,加之本身就 ... -
twisted简单实现多线程,轮询,后台daemon运行
2011-03-29 11:25 3227from twisted.application impo ... -
《django web开发指南》在v1.2.4版本上的出入
2011-01-25 00:44 1484<Django web 开发指南>第145页 第七 ... -
django.utils._os 中 safe_join 函数 windows下总报ValueError异常
2011-01-20 17:20 1766最近无聊在家看看django ... -
python 绑定进程在某个cpu上执行-affinity
2010-05-05 18:39 10510因为最近在看multiprocessing 所以想看看多进程在 ...
相关推荐
Twisted Python事件驱动网络框架
twisted 异步教程,比较全面的介绍了twisted框架,中文版本
twisted.rar,Twisted-17.9.0.dist-info.rar:主要是Python虚拟环境中scrapy的框架容易安装失败的两个,可能时间久了,就会不适用!!
Twisted是基于异步模式的开发框架,因而利用Twisted进行非阻塞编程自然也是必会的用法,下面我们就来一起看一下使用Python的Twisted框架编写非阻塞程序的代码示例: Twisted是基于异步模式的开发框架,因而利用Twisted...
第一部分:Twisted理论基础 第二部分:异步编程初探与reactor模式 第三部分:初步认识Twisted 第四部分:由Twisted支持的诗歌客户端 第一个twisted支持的诗歌服务器 第一滴心血 第五部分:由Twisted支持的诗歌...
主要介绍了使用Python的Twisted框架实现一个简单的服务器,翻译自Twisted的文档,需要的朋友可以参考下
Twisted网络编程中文文档,使我们一个学习Python框架入门的不错资料,希望对各位爱好学习的同志们有帮助。
我已经用Twisted框架几年了,因此思考过我当初是怎么学习它(学得很慢)并发现学习它的最大难度并不在Twisted本身,而在于对其模型的理解,只有理解了这个模型,你才能更好去写和理解异步程序的代码。大部分Twisted的代
The Twisted Documentation 电子版 pdf twisted 框架 网络编程
python twisted 框架 需要zope.interface python twisted 框架 需要zope.interface
Twisted的异步工作模式使其在非阻塞情况下可以拥有较高的性能,这里我们来看一下使用Python的Twisted框架构建非阻塞下载程序的实例教程,包括服务器端与客户端的实践.
Start by building basic TCP clients and servers, and then focus on deploying production-grade applications with the Twisted Application infrastructure. Along the way, you can play with and extend ...
from twisted.internet.protocol import Protocol from sys import stdout class Echo(Protocol): def dataReceived(self, data): stdout.write(data) 在本程序中,只是简单的将获得的数据输出到标准输出中来显示...
Twisted Network Programming Essentials,一本介绍socket异步编程框架twisted
python twisted框架 服务器端 示例
我学习和使用twisted已经好几年了,通过这几年的学习和工作我得出的结论就是:学习twisted困难的地方就是对异步编程的理解而不是怎样去用twisted 的函数去写代码. twisted 的代码写的都很简洁和清晰,而且有很好的注释...
Twisted是一个事件驱动的python网络框架被所有类型的软件使用。
烧瓶扭曲 简单整合Flask和Twisted 安装 pip install Flask-Twisted 最小的应用 from flask import Flask from flask . ext . twisted import Twisted app = Flask ( __name_...application = Application ( 'twisted-fl
# ~*~ Twisted - A Python tale ~*~ from time import sleep # Hello, I'm a developer and I mainly setup WordPress. def install_wordpress(customer): # Our hosting company Threads Ltd. is bad. I start ...