您的位置:首页 > 编程语言 > Python开发

Learning python 系列7

2008-05-26 10:22 330 查看
今天首先讨论daemon.py这个文件。
这里有几个base class以及一些设计方法
VMCDaemon,它的__init__(self,freq,device,notification_manager)
有member:
frequency:
device:
loop:
manager:上述除了loop初始化为none,其他都来自初始化参数。
方法:
start:如果loop为None或者loop没有运行,self.loop=LoopingCall(self.funtion).而后
调用loop.start(self.frequency).
stop:是如果loop.running,调用loop.stop停止。
function:这里没有实现。但是LoopingCall()是什么意思呢?

SignalQuanlityDaemon是继承VMCDaemon,它定义了function.
为self.device.sconn.get_signal_level()的d添加 addcallback.而这个callback是
由UnsolicitedNoticaiton构造一个notification,然后交由manager.on_notification_received()处理。
type为SIG_RSSI,arg为rssi。

CellTypeDaemon和上一个类似,不果调用sconn.get_network_info()返回d,添加callback,
这个callback构造同样的类对象,不过参数是SIG_NEW_CONN_MODE,netinfo[1].

NetworkSpeedDaemon稍微复杂,也是继承VMCDeamon().它比父类多一个netspeed有NetwrokSpeed()构造。
重载方法:
start:netspeed.start(),添加self.function作为LoopingCall().然后调用loop.start().
stop:先把loop停掉,然后停掉netspeed.stop().
function:同样构造UnsolicitedNotification,然后调用manager.on_notifiacation_received().

VMCDaemonCollection是一个基类。有member 字典变量daemons={}。
append_deamon(self,name,daemon):
has_daemon(self,name)
remove_daemon(self,name)
start_daemons(self):对于每一个self.daemons.values(),调用deamon.start().
stop_daemon(self,name),
stop_deamons(self).

而VMCDaemonFactory()这是一个工厂的设计。至于collection,或者是factory,等在设计模式中详细讨论之。有一个方法:build_daemon_collection(cls,device,notification_,manager)
首先构造一个collection由上面的类构造。对于不同的设置不同的freq.
建SignalQuanlityDaemon(),CellTypeDaemon如果条件允许,也即是在device的能力范围内。Append them
(signal,...),(conn_mode,...).

再来看看CLICollaborator和CLICollaboratorFactory类。先看Factory
他是为了实现ICollaboratorFactory的interface,which:声明了get_collaborator(self,device,view).
重新定义了接口参数:
get_collaborator(cls,device,*args,**kwds):返回CLICollaborator(device,*args,**kwds).

而这个CLICollaborator()的类是实现ICollaborator,which:单个接口:get_pin,get_puk,get_puk2.
有成员:__init__(self,device,config=None)
keyring:
config:
device:
pin:
puk:
puk2:除了device,和config来自参数,其他都是None.
有方法:
get_pin(self):如果self.config并且self.config['pin']存在,直接返回。否则,构造defer,
调用deferToThread()让用户输入。
get_puk(self):首先要输入pin,调用deferToThread(),并且用返回值作为waitForDeferred()的参数。
yield pin,什么意思?由pin.getResult()返回the pin.同样等待puk,yield it,取得the puk.
yield他们两个,返回。
get_puk = deferredGenerator(get_puk)什么意思啊?晕晕晕。
get_puk2(self):
和上面一样,只是puk换成puk2.

这里有很多机制并不了解,来自于twisted.internet.threads和defer这两个模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: