2012年5月17日

摘要: Python编程语言作为一款比较新的程序应用语言,其中有很多方法是开发人员需要慢慢熟练掌握的。比如今天为大家介绍的Python yield就是一个比较特殊的应用。yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白Python yield的用法。只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子:defaddlist(alist): foriinalist: yieldi+1 //此处 i+1 为yield的参数. 外部调用的时候可获取该参数值取出alist的每一项,然后把i + 1塞进去。然后通过调用取出每一项:alist=[1,2,3,4] 阅读全文
posted @ 2012-05-17 18:29 很多不懂呀。。 阅读(1140) 评论(0) 推荐(0) 编辑
摘要: 最为简单的情况下,除了了解清reactor的简单使用,你还要了解Protocol和Factory。它们最终都会由reactor的侦听建立和run来统一调度起来。 建立服务器的第一个要解决的问题就是服务与外界的交流协议。协议的定义在twisted中是通过继承twisted.internet.protocol.Protocol类来实现的。在协议中你可以定义连接、数据接收、断开连接等一系列的事件如果进行响应。但是对于所有连接上来的协议的建立、持久配置数据的存储这样的内容并不会保存在协议中。持久配置数据的存储通常都会保存在工厂里。 工厂的定义在twisted中是通过继承twisted.internet 阅读全文
posted @ 2012-05-17 18:19 很多不懂呀。。 阅读(2942) 评论(0) 推荐(0) 编辑
摘要: 1.yield用法: 必须在函数内出现,如果该函数包含yield,则是返回值是生成器,不必return任何东西2. @defer.inlineCallbacks 如果该decorator是生成器函数前,在此生成器函数,不阻塞,直接执行,但是返回值还是个生成器;3.@property: 函数作属性使用4.defer是事件调度的管理器,d.callback()时,defer中的函数系列才被执行;5. reactor.callLater(1, d.callback, 3 ), 必须reactor.run()后才被调用;6. defer.maybeDeferred()Call the given fu 阅读全文
posted @ 2012-05-17 18:06 很多不懂呀。。 阅读(682) 评论(0) 推荐(0) 编辑
摘要: 透明代理(PB, Perspective Broker)是用于远程方法调用和对象交换协议,该协议是异步和对称的。使用PB, 客户端可以直接调用服务器的函数并得到函数的返回结果。 Twisted针对Server和Client分别提供了pb.PBServerFactory和pb.PBClientFactory供用户使用, 其中Factory中的root对象必须继承自pb.Referenceable(pb.root就继承自pb.Referenceable)。 Sevrer中提供的方法必须以remote_开头, Client使用该方法时不用指定remote。 例如下面的例子中服务器端提供了remote 阅读全文
posted @ 2012-05-17 17:12 很多不懂呀。。 阅读(2059) 评论(0) 推荐(0) 编辑
摘要: 通过《如何使用twisted编译异步服务器》一文的学习,我们可以轻松使用twisted来搭建自己的服务器。前面的示例中服务端并不涉及到与外部服务器的交互,而实际的服务端往往需要同时与其他服务端进行交互(例如进行密码验证)。使用传统的os.socket连接服务器的方法虽然可行,但却并不符合异步的原则,使用deferred则可以异步的建立网络连接,频繁的网络连接总是会加大服务器压力,因此更多的时候是使用网络连接词。这里我们主要学习在twisted下如何异步的网络连接池。 首先我们温习一下建立单个网络连接的方法。twisted中server和client的网络连接建立都需要使用protocol和f. 阅读全文
posted @ 2012-05-17 16:50 很多不懂呀。。 阅读(540) 评论(0) 推荐(1) 编辑
摘要: 使用twisted编译异步服务器 一 简介 twisted是python下的一个事件驱动的异步网络应用框架,其项目主页为http://twistedmatrix.com/trac/。 网络上关于twisted的介绍很多, 我这里就不啰嗦了。我们先来看一个使用twisted的实例。 import os, sys, timefrom twisted.internet.protocol import Protocol,Factoryfrom twisted.internet import reactor, defer, threadsfrom twisted.protocols.basic impo 阅读全文
posted @ 2012-05-17 16:01 很多不懂呀。。 阅读(889) 评论(0) 推荐(0) 编辑
摘要: 首先看一下自省,介绍一下几个重要的函数:dir函数,传入的参数是对象,返回该对象的所有属性和函数列表:如:可以看到,string对象的所有函数,属性都列举出来了。getattr方法,传入参数是对象和该对象的函数或者属性的名字,返回对象的函数或者属性实例,如下:callable方法,如果传入的参数是可以调用的函数,则返回true,否则返回false。下面这段代码列出对象所有函数:methodList = [method for method in dir(object) if callable(getattr(object,method))]比如查看string的所有函数:接下来,看看pytho 阅读全文
posted @ 2012-05-17 10:54 很多不懂呀。。 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 首先通过一个例子来看一下本文中可能用到的对象和相关概念。?123456789101112131415#coding: UTF-8 import sys # 模块,sys指向这个模块对象 import inspect def foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象 def __init__(self, name='kitty'): self.name = name def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问 print self.na 阅读全文
posted @ 2012-05-17 10:35 很多不懂呀。。 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 1. 装饰器入门1.1. 需求是怎么来的?装饰器的定义很是抽象,我们来看一个小例子。?1234def foo(): print 'in foo()'foo()这是一个很无聊的函数没错。但是突然有一个更无聊的人,我们称呼他为B君,说我想看看执行这个函数用了多长时间,好吧,那么我们可以这样做:?12345678import time def foo(): start = time.clock() print 'in foo()'end = time.clock() print 'used:', end - start foo()很好,功能看起来无懈可 阅读全文
posted @ 2012-05-17 10:17 很多不懂呀。。 阅读(276) 评论(0) 推荐(0) 编辑
摘要: python是一种面向对象的开发语言,在函数中使用全局变量,一般应作全局变量说明,只有在函数内经过说明的全局变量才能使用,下面介绍下Python全局变量有关问题。应该尽量避免使用Python全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,这时可能导致程序中的错误。这种错误是很难发现和更正的。全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量。 但是某些时候,Python全局变量能够解决局部变量所难以解决的问题。事物要一分为二。 阅读全文
posted @ 2012-05-17 09:32 很多不懂呀。。 阅读(819) 评论(0) 推荐(0) 编辑

导航