你今天Python了吗?(下)
在体验了wxPython的强大之后,让我们把注意力集中到Twisted上来。在C++的世界里,你会发现一个很棒的网络应用框架,那就是ACE了;在Python的地盘,Twisted则是在网络应用框架中当之无愧的老大。
Twisted是一个纯Python的网络应用框架。由于Twisted社区十分的活跃,你可以从网站上得到充分的文档,让你轻松上手;Twisted是开源的,你可以为框架增加任何的特性,只要你有好的Idea;由于Twisted是完全由Python编写的,本身会十分安全和稳定。这都得益于Python本身的设计和容错机制;还有最最重要的一点,就是你能够很快的开发出遵循自定义协议的服务器。这是不是很帅呢?大家先看以下代码:
from twisted.internet import reactor
class Echo(Protocol):
def dataReceived(self, data):
self.transport.write(data)
if data == 'q':
self.transport.loseConnection()
def main():
factory = Factory()
factory.protocol = Echo
reactor.listenTCP(8000,factory)
reactor.run()
if __name__ == '__main__':
main()
这里定义了一个很简单的Echo协议:就是将client端的输入再次回显而已。运行该脚本,然后利用telnet程序去连接本机的8000端口,连接上之后,你可以尝试着敲入几个字符,你会发现屏幕上会将你敲入的字符显示了两遍。不需要惊讶,因为一遍是由于键盘输入产生的屏幕输出,而另一遍则是由服务器将接受到的数据发送回client而产生的输出。如果你按下'q',就能够断开与服务器的连接。
虽然以上实现的功能很简单,但是我们确实建立了一个属于自己的服务器,一个按照自己定义的协议提供服务的server。开发的速度是不是很快呢?正如Twisted网站上说的Develop servers at lightning speed(闪电般的速度)。只要将具体的协议做进一步的扩展,就能建立起功能强大的服务器了。在这里所提到的Twisted的功能仅仅是这座宝藏的冰山一角,在这里就不进一步去阐述了。有兴趣的朋友可以从Twisted的网站得到更多的信息。
除了上篇和以上讲述到的两个强大的基于Python的类库之外,还有IronPython,一个在.NET上的Python实现,不仅可以把Python程序编译成IL并跟CLR良好的协作,其执行速度还要比Python的C语言实现要快许多;还有Zope也不得不提一下。它也是由Python编写而成的Web Server和Web Application应用开发框架,其中用到了不少新鲜的东西哦,譬如面向对象数据库以及CMF(Content Management Framework)等。还有Plone,一个十分出色的CMS(Content Management System),想看看以它进行内容管理的网站吗?看看这里很cool的网站列表吧。你会发现夏威夷政府,还会发现太空总署。除了Plone,还有PyGame,还有高居SourceForge下载排行榜前列的BitTorrent,还有……赶紧去瞧瞧你身边的宝藏吧。如果你仍然对于Python持怀疑的态度,最后再听听牛人Eric Raymond的意见吧:Why Python?
让Python在国内发展得更快,得到更广泛的应用,作为程序员的我们是不是也该出一分力呢?毕竟Python让我们的编码变得更加有效,也更加有趣。
Be a pragmatic programmer,从Python开始。 你今天Python了吗?
你今天Python了吗?(下)的更多相关文章
- sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO
sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...
- Python中的下划线(译文)
原文地址这篇文章讨论Python中下划线_的使用.跟Python中很多用法类似,下划线_的不同用法绝大部分(不全是)都是一种惯例约定. 单个下划线(_) 主要有三种情况: 1. 解释器中 _符号是指交 ...
- Python 3.x下消除print()自动换行
Python 2.x下的print语句在输出字符串之后会默认换行,如果不希望换行,只要在语句最后加一个“,”即可.但是在Python 3.x下,print()变成内置函数,加“,”的老方法就行不通了. ...
- 详解 Python 中的下划线命名规则
在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...
- 抓取oschina上面的代码分享python块区下的 标题和对应URL
# -*- coding=utf-8 -*- import requests,re from lxml import etree import sys reload(sys) sys.setdefau ...
- python命令行下tab键补全命令
在python命令行下不能使用tab键将命令进行补全,手动输入又很容易出错. 解决:tab.py #/usr/bin/env python # -*- coding:utf-8 -*- ''' 该模块 ...
- Python交互模式下方向键出现乱码
解决办法如下: 1.安装readline模块 readline库是bash shell用的库,包含许多功能,如命令行自动补全等. ubuntu下安装的命令: sudo apt-get instal ...
- 【技术翻译】支持向量机简明教程及其在python和R下的调参
原文:Simple Tutorial on SVM and Parameter Tuning in Python and R 介绍 数据在机器学习中是重要的一种任务,支持向量机(SVM)在模式分类和非 ...
- [转]关于python中带下划线的变量和函数的意义
Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就易于阅读, ...
- python多线程场景下print丢失
python多线程情况下,print输出会出现丢失的情况,而logging模块的日志输出不会. 以下是示例代码,多运行几次就会发现这个有意思的现象 # coding:utf-8 import thre ...
随机推荐
- ios开发跳转
如果我的是A->B->C后,我想直接从 C->A 应该怎么做???这是我的问题 看了这个帖子不太明白 这是10楼的解决办法 , 虽然 写的很清楚 ,但是还是没懂啊 ...
- 每用户订阅上的所有者 SID 不存在 (异常来自 HRESULT:0x80040207)
出现这个问题是因为pQueryFilter.WhereClause = "RoomNumber=" +cmbFromPoint.SelectedItem;中的cmbFromPoin ...
- java c# 加密与解密对照
原文 java c# 加密与解密对照 最近一直烦恼,java , c# 加密的不同,然后整理了一下,留个备份的轮子: 其中在 java.c#加密转换时,最重要的是 IV 的确定,我常常用如下方法使得j ...
- Servlet的response输出到页面时乱码的解决方法
package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...
- sql server 自定义函数的使用
sql server 自定义函数的使用 自定义函数 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回 用户自定义函数的类型: 标量函数:返回一个标量值 表格值函数{内联表格值函 ...
- 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上 ...
- Spring中的mappingResources和mappingDirectoryLocations
今天使用Spring+Hibernate进行事务管理,按照顺序也就是配置,DataSource,Sessionfactory,事务管理器以及拦截器. DateSource可以直接使用Hibernate ...
- SQL语句练习
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
- .net MVC APi调用
常用的调用方法为Get/Post Get方法: 服务器 public string Get(int id) { return "value"; } 这个直接在网页就可以测试,用 h ...
- hibernate--关联映射(多对一,一对一)
多对一 关联映射 --- many-to-one 场景:用户和组:从用户角度来,多个用户属于一个组(多对一 关联) 使用hibernate开发的思路:先建立对象模型(领域模型),把实体抽取出来. 目前 ...