2004年08月02日 星期一 16:41
Hollo info: 大家都感觉现在的 列表,知识的查询非常困难,那未,将讨论出来的有效知识固定下来,成为文章,为后来者作个准备,实为一大德政是也乎! 请关注 http://220.248.2.35:7080/moin/RecentChanges Wiki 更新记录 今天在 PyUSS 页面组织了: 基准代码/benchmarks -- 测试平台; 演化,UML设计等等 相关知识 收集整理开发过程中大家发现,使用,迷惑的知识点,包括基础的东西是也乎 FAQnetwork -- TCP/IP;UCP...... PyThread -- 线程编程 PyOptimize -- Python 代码优化经验收集! 请同志们继续学习,共享经验! /******** [2004-08-02]16:30:37 ; info wrote: info at xichen.com> limodou,您好! info at xichen.com> 用twisted写的服务器端本身就处理的多线程,这个大家可以用我们做测试的例子来试。 info at xichen.com> info at xichen.com> 对于客户端来讲,除非是传输文件本身,没有必要采用多线程。 info at xichen.com> info at xichen.com> 我的意见是,达到本期的产品基线,然后用最稳定、最简洁的方式来实现。 info at xichen.com> ======= 2004-08-01 16:50:58 您在来信中写道:======= >>hoxide,您好! >> >> 的确,整个程序只有一个线程,那么这种异步都通过twisted来完成,的确象queue这种阻塞方式就无法实现了。多线程,多点测试才更符合实际。 >> >> >>======= 2004-08-01 15:28:13 您在来信中写道:======= >> >>>limodou,您好! >>> >>> 开始我们也尝试过用queue的阻塞处理,但这样就阻塞了主线程,连recive都不行. >>>这个问题的根本解决方案还是用线程,我只是提供一种类似的东西("轻便线程"http://www-900.ibm.com/developerWorks/cn/linux/sdk/python/) >>>另外我觉得应该建一个多连接的测试程序,而不只是一个连接多请求的测试程序. >>>而窗口应该放在服务端比较好一点 >>> >>>======= 2004-08-01 14:54:55 您在来信中写道:======= >>> >>>>hoxide,您好! >>>> >>>> 其实真正的数据发送是由客户端做的,我们可以把连接、发送数据等进行封装由客户端来调用。这样由客户端去组织数据,而我们的协议处理只是一个被调用方就行了。因为这只是一个测试程序,还不是真正的应用,因此可能就不讲究了。真正做成客户端,可能程序都要改了。既然我们不想发送太快,queue完全可以采用阻塞方式来处理。 >>>> >>>>======= 2004-08-01 14:31:17 您在来信中写道:======= >>>> >>>>>limodou,您好! >>>>> >>>>> 这点我直到但是程序还是依赖一个全局变量,对于复杂的情况,这种用法是不好的,首先明显得会带来名字空间的污染,其次如果程序执行的上下文关系复杂,那么也就不是几个全局变量能轻松解决的. >>>>> >>>>> >>>>>======= 2004-08-01 14:07:21 您在来信中写道:======= >>>>> >>>>>>hoxide,您好! >>>>>> >>>>>> 其实不丢message也可以,这样不用使用生成器。只要把message生成放到else中就行了。因为那时是可以发送数据的。之所以丢是因为先生成了message,然后才判断是否可以发送,如果不能发送自然就丢了。如果改到可以发送才生成message就不会丢了。 >>>>>> >>>>>> while nownum < count: >>>>>> if self.factory.sendQueue.full(): >>>>>> self.call = reactor.callLater(0, self.testserver) >>>>>> return >>>>>> else: >>>>>> message = usspmsg.USSPMessage() #* >>>>>> message.setMsgName('mail_counter') #* >>>>>> message.body.setField('uid',str(nownum)) #* 这几行移下来了 >>>>>> self.factory.sendQueue.put_nowait(message) >>>>>> nownum += 1 >>>>>> >>>>>>======= 2004-08-01 12:19:47 您在来信中写道:======= >>>>>> >>>>>>>HD,您好! >>>>>>> >>>>>>>大家最好先了解一下生成器的有关知识:IBM上的《可爱的 >>>>>>>Python:迭代器和简单生成器》: >>>>>>>http://www-900.ibm.com/developerWorks/cn/linux/sdk/python/charm-20/index.shtml >>>>>>> >>>>>>>昨天给的代码还有点错误,修改的代码(其实只改了打星号的地方): >>>>>>> >>>>>>> def testserver(self): >>>>>>> """向服务器发的测试报文""" >>>>>>> try: >>>>>>> self.pp.next() >>>>>>> self.call = reactor.callLater(0,self.testserver) >>>>>>> return >>>>>>> except StopIteration: >>>>>>> pass >>>>>>> >>>>>>> def __init__(self): >>>>>>> self.pp=self.sendQQ() >>>>>>> ussp.USSClientQueueProtocol.__init__(self) >>>>>>> >>>>>>> def sendQQ(self): >>>>>>> global nownum >>>>>>> global count >>>>>>> i=1 >>>>>>> while i < count: >>>>>>> message = usspmsg.USSPMessage() >>>>>>> message.setMsgName('mail_counter') >>>>>>> message.body.setField('uid',str(i)) >>>>>>> while self.factory.sendQueue.full(): #* >>>>>>> yield None #** >>>>>>> self.factory.sendQueue.put_nowait(message) >>>>>>> i += 1 >>>>>>> nownum=i >>>>>>> self.disconnect() >>>>>>> >>>>>>>这里真正的处理是在sendQQ这个函数定义的.self.pp是生成器的实例,由__init__()生成,testserver只是调度完成这个处理的函数,而且是和具体的处理独立的,他只是简单得实现了当处理"暂停"后的重新启动. >>>>>>> >>>>>>>真正神奇的地方是打星号的行.他测试sendQueue确定是否能发出message,如果不能就会执行yield >>>>>>>None,这时函数就终止在**这行,直到在有.next()方法调用时再从这句开始执行. >>>>>>>这个好处是原来的处理流程可以很顺利得进行.不需要保存中间变量.注意0731a的testserver能正确得发出所有message,是因为恰巧有全局变量nownum完全确定处理的执行状态了.但事事上一般的处理不会那么简单,有复杂的状态组合(上面的代码并没用nownum,而是用了循环变量i,注意他不是全局的!!!!!).正像zoomq昨天说的0731a的testserver在queue满的时候前面对message的处理就被抛弃了,但在这个生成器版本,先前对message的处理没有被抛弃. >>>>>>> >>>>>>>个人觉得这个生成器版本还是不够完美,异步传输还是应该以线程为基础进行.下一个版本可能是基于生成器的简单线程:) >>>>>>> >>>>>>>说得不是很明白,我不清楚大家对什么地方有疑问. >>>>>>> >>>>>>> >>>>>>>===== 2004-08-01 00:33:08 您在来信中写道:======= >>>>>>> >>>>>>>>细说说,为什么说是生成器版的呢? >>>>>>>> >>>>>>>>On Sat, 31 Jul 2004 23:22:53 +0800, hoxide >>>>>>>><hoxide_dirac at yahoo.com.cn> wrote: >>>>>>>>> python-chinese,您好! >>>>>>>>> >>>>>>>>> >>>>>>>>> 为什么要用生成器,现在的testserver的执行流程只依赖于nownum,而事实上通常的服务要依赖于整个运行流程.另外这样的写法可将窗口部分的代码抽出. >>>>>>>>> >>>>>>>>> 致 >>>>>>>>> 礼! >>>>>>>>> >>>>>>>>> hoxide >>>>>>>>> hoxide_dirac at yahoo.com.cn >>>>>>>>> 2004-07-31 >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>-- >>>>>>>>HD(燃烧中的火) >>>>>>>>我工作我快乐,我勤奋我收获。请与我一起快乐,与我一起收获。 >>>>>>>>_______________________________________________ >>>>>>>>python-chinese list >>>>>>>>python-chinese at lists.python.cn >>>>>>>>http://python.cn/mailman/listinfo/python-chinese >>>>>>>> >>>>>>> >>>>>>>= = = = = = = = = = = = = = = = = = = = >>>>>>> >>>>>>> >>>>>>> 致 >>>>>>>礼! >>>>>>> >>>>>>> >>>>>>> hoxide >>>>>>> hoxide_dirac at yahoo.com.cn >>>>>>> 2004-08-01 >>>>>>> >>>>>>>_______________________________________________ >>>>>>>python-chinese list >>>>>>>python-chinese at lists.python.cn >>>>>>>http://python.cn/mailman/listinfo/python-chinese >>>>>>> >>>>>> >>>>>>= = = = = = = = = = = = = = = = = = = = >>>>>> >>>>>> >>>>>> 致 >>>>>>礼! >>>>>> >>>>>> >>>>>> limodou >>>>>> chatme at 263.net >>>>>> 2004-08-01 >>>>>> >>>>>>_______________________________________________ >>>>>>python-chinese list >>>>>>python-chinese at lists.python.cn >>>>>>http://python.cn/mailman/listinfo/python-chinese >>>>>> >>>>> >>>>>= = = = = = = = = = = = = = = = = = = = >>>>> >>>>> >>>>> 致 >>>>>礼! >>>>> >>>>> >>>>> hoxide >>>>> hoxide_dirac at yahoo.com.cn >>>>> 2004-08-01 >>>>> >>>>>_______________________________________________ >>>>>python-chinese list >>>>>python-chinese at lists.python.cn >>>>>http://python.cn/mailman/listinfo/python-chinese >>>>> >>>> >>>>= = = = = = = = = = = = = = = = = = = = >>>> >>>> >>>> 致 >>>>礼! >>>> >>>> >>>> limodou >>>> chatme at 263.net >>>> 2004-08-01 >>>> >>>>_______________________________________________ >>>>python-chinese list >>>>python-chinese at lists.python.cn >>>>http://python.cn/mailman/listinfo/python-chinese >>>> >>> >>>= = = = = = = = = = = = = = = = = = = = >>> >>> >>> 致 >>>礼! >>> >>> >>> hoxide >>> hoxide_dirac at yahoo.com.cn >>> 2004-08-01 >>> >>>_______________________________________________ >>>python-chinese list >>>python-chinese at lists.python.cn >>>http://python.cn/mailman/listinfo/python-chinese >>> >> >>= = = = = = = = = = = = = = = = = = = = >> >> >> 致 >>礼! >> >> >> limodou >> chatme at 263.net >> 2004-08-01 >> >>_______________________________________________ >>python-chinese list >>python-chinese at lists.python.cn >>http://python.cn/mailman/listinfo/python-chinese >> info at xichen.com> = = = = = = = = = = = = = = = = = = = = info at xichen.com> 致 info at xichen.com> 礼! info at xichen.com> info info at xichen.com> info at xichen.com info at xichen.com> 2004-08-02 ********************************************/ -- Free as in Freedom Zoom.Quiet #=========================================# ]Time is unimportant, only life important![ #=========================================# sender is the Bat!2.12.00
Zeuux © 2024
京ICP备05028076号