2004年08月09日 星期一 20:36
limodou.你好 为什么connection不会改变呢? thread.start_new(handleClient, (connection,))中传递不是connection的引用嘛?connection不属于线程的Shared global memory 吗? ps:再请教一下一个process启动了若干线程,那么它的Shared global memory 是什么?是不是这个process的中定义的变量,生成的实例? > 杨元杰,您好! > > 每次connection都是一个新值。而线程A中的connection你并没有去改变,因此它永远使用的是旧的值。 > > ======= 2004-08-09 16:00:54 您在来信中写道:======= > > >大家好! > >这是《programming python》10。4中的一个例子。这例子运行在服务器端,响应客户端的请求 > >Example 10-7. PP2E\Internet\Sockets\thread-server.py > >######################################################### > ># Server side: open a socket on a port, listen for > ># a message from a client, and send an echo reply; > ># echos lines until eof when client closes socket; > ># spawns a thread to handle each client connection; > ># threads share global memory space with main thread; > ># this is more portable than fork--not yet on Windows; > >######################################################### > > > >import thread, time > >from socket import * # get socket constructor and constants > >myHost = '' # server machine, '' means local host > >myPort = 50007 # listen on a non-reserved port number > > > >sockobj = socket(AF_INET, SOCK_STREAM) # make a TCP socket object > >sockobj.bind((myHost, myPort)) # bind it to server port number > >sockobj.listen(5) # allow up to 5 pending connects > > > >def now(): > > return time.ctime(time.time()) # current time on the server > > > >def handleClient(connection): # in spawned thread: reply > > time.sleep(5) # simulate a blocking activity > > while 1: # read, write a client socket > > data = connection.recv(1024) > > if not data: break > > connection.send('Echo=>%s at %s' % (data, now())) > > connection.close() > > > >def dispatcher(): # listen until process killd > > while 1: # wait for next connection, > > connection, address = sockobj.accept() # pass to thread for service > > print 'Server connected by', address, > > print 'at', now() > > thread.start_new(handleClient, (connection,)) > > > >dispatcher() > > > >我不明白的是: > > 在函数dispatcher()中,当服务器接到一个请求,启动了一个线程A,在线程A运行过程中,服务器又街道另个client的请求,执行connection, address = sockobj.accept(),那么线程A中的connecion不是就会被覆盖了吗? > > > > > > > > > > > >------------------------------------------------------------------------------------- > >15寸液晶双子星,震天雷II--D451¥2466/D353¥2399 http://design.163.com/aocmonitor/index.html > >_______________________________________________ > >python-chinese list > >python-chinese at lists.python.cn > >http://python.cn/mailman/listinfo/python-chinese > > > > = = = = = = = = = = = = = = = = = = = = > > > 致 > 礼! > > > limodou > chatme at 263.net > 2004-08-09 > > ------------------------------------------------------------------------------------- 15寸液晶双子星,震天雷II--D451¥2466/D353¥2399 http://design.163.com/aocmonitor/index.html
2004年08月09日 星期一 20:57
mike gaul,您好! Python中不含有绝对的私有变量,象使用下划线的确Python会有一些特殊的处理,但你可以不去管它。不需要刻意地去使用私有变量,如果使用尽可能按约定来做。详情在python语法规范中有说明。 ======= 2004-08-09 17:11:29 您在来信中写道:======= >在手册中有这样一段: >9.6 私有变量 > >Python对类的私有成员提供了有限的支持。任何形如__spam >(以至少双下划线开头,至多单下划线结尾)随即都被替代为 > >_classname__spam,去掉前导下划线的classname 即当前的类 >名。这种混淆不关心标识符的语法位置,所以可用来定义私有类 >实例和类变量、方法,以及全局变量,甚至于将其它类的实例保 >存为私有变量。混淆名长度超过255个字符的时候可能会发生截 >断。在类的外部,或类名只包含下划线时,不会发生截断。 > >我看得迷糊了。什么叫做“有限的支持”呢?我应该怎样在一个 >类里定义一个私有变量呢?是不是按照上面说得以两个下划线开 >头? > > --- limodou <chatme at 263.net> 的正文: >> mike gaul,您好! >> >> >> >一个下划线一般是私有变量(只是一个约定),两个下划线一般表示特殊含义。在python编程规范中有介绍。PEP >> >8。在http://blog.csdn.net/dreamingk/archive/2004/07/26/51667.aspx有中文的链接。 >> >> ======= 2004-08-09 15:46:50 您在来信中写道:======= >> >> >那么以一个下划线和两个下划线开头的有什么区别? >> >我看为什么有以两个下划线开头的呢? >> >有的前后都有两个下划线。 >> > >> >不好意思。基础问题。 >> > >> >>_________________________________________________________ >> >Do You Yahoo!? >> >150万曲MP3疯狂搜,带您闯入音乐殿堂 >> >http://music.yisou.com/ >> >美女明星应有尽有,搜遍美图、艳图和酷图 >> >http://image.yisou.com >> >1G就是1000兆,雅虎电邮自助扩容! >> >>http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/event/mail_1g/ >> >_______________________________________________ >> >python-chinese list >> >python-chinese at lists.python.cn >> >http://python.cn/mailman/listinfo/python-chinese >> > >> >> = = = = = = = = = = = = = = = = = = = = >> >> >> 致 >> 礼! >> >> >> limodou >> chatme at 263.net >> 2004-08-09 >> >> > _______________________________________________ >> python-chinese list >> python-chinese at lists.python.cn >> http://python.cn/mailman/listinfo/python-chinese >> > >_________________________________________________________ >Do You Yahoo!? >150万曲MP3疯狂搜,带您闯入音乐殿堂 >http://music.yisou.com/ >美女明星应有尽有,搜遍美图、艳图和酷图 >http://image.yisou.com >1G就是1000兆,雅虎电邮自助扩容! >http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/event/mail_1g/ >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! limodou chatme at 263.net 2004-08-09
2004年08月09日 星期一 20:57
mike gaul,您好! from Products.PageTemplates.PageTemplateFile import PageTemplateFile manage_addIssueTrackerForm = PageTemplateFile('zpt/addIssueTrackerForm', globals()) 这是从别的地方抄来的,自已对着api看吧。 ======= 2004-08-09 17:12:22 您在来信中写道:======= >是啊是啊。所以我想用zpt的话,应该怎样Import? > --- limodou <chatme at 263.net> 的正文: >> [Zoom.Quiet],您好! >> >> zpt与DTML不同,是另一种模板系统。 >> >> ======= 2004-08-09 16:46:56 您在来信中写道:======= >> >> >Hollo limodou: >> > >> > 但是在 Zope 的处理对象中,都是DHTML好象是也乎, >> >并不是专指 DHTML 语法的?? >> > >> > >> >/******** [2004-08-09]16:46:13 ; limodou wrote: >> > >> >limodou> mike gaul,您好! >> > >> >limodou> >> 是说的zpt吧。找找别人使用zpt的product看一看就行了。 >> > >> >limodou> ======= 2004-08-09 15:11:36 >> 您在来信中写道:======= >> > >> >>>???好象dtml和template page不是一个东西吧。 >> >>>好象语法不同吧。 >> >>> >> >>> --- "[Zoom.Quiet]" <zoomq at itcase.com> 的正文: >> >>>> Hollo mike: >> >>>> from Globals import DTMLFile >> >>>> 就是模板文件是也乎?? >> >>>> >> >>>> >> >>>> >> >>>> /******** [2004-08-09]14:32:25 ; mike wrote: >> >>>> >> >>>> mike gaul> >> >>>> 在zope创建一个product中,可以有这样一句话: >> >>>> mike gaul> from Globals import HTMLFile >> >>>> mike gaul> 或者 >> >>>> mike gaul> from Globals import DTMLFile >> >>>> >> >>>> mike gaul> >> 那我我想,怎样载入一个模板文件template >> >>>> page呢? >> >>>> >> >>>> mike gaul> >> >>>> >> >>>>_________________________________________________________ >> >>>> mike gaul> Do You Yahoo!? >> >>>> mike gaul> 150万曲MP3疯狂搜,带您闯入音乐殿堂 >> >>>> mike gaul> http://music.yisou.com/ >> >>>> mike gaul> >> 美女明星应有尽有,搜遍美图、艳图和酷图 >> >>>> mike gaul> http://image.yisou.com >> >>>> mike gaul> 1G就是1000兆,雅虎电邮自助扩容! >> >>>> mike gaul> >> >>>> >> >>>>http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/event/mail_1g/ >> >>>> mike gaul> >> >>>> _______________________________________________ >> >>>> mike gaul> python-chinese list >> >>>> mike gaul> python-chinese at lists.python.cn >> >>>> mike gaul> >> >>>> >> http://python.cn/mailman/listinfo/python-chinese >> >>>> >> >>>> >> >>>> ********************************************/ >> >>>> >> >>>> -- >> >>>> Free as in Freedom >> >>>> >> >>>> [Zoom.Quiet] >> >>>> >> >>>> #=========================================# >> >>>> ]Time is unimportant, only life important![ >> >>>> #=========================================# >> >>>> >> >>>> sender is the Bat!2.12.00 >> >>>> >> >>>> _______________________________________________ >> >>>> python-chinese list >> >>>> python-chinese at lists.python.cn >> >>>> >> http://python.cn/mailman/listinfo/python-chinese >> >>>> >> >>> >> >>>>_________________________________________________________ >> >>>Do You Yahoo!? >> >>>美女明星应有尽有,"一搜"搜遍美图、艳图和酷图 >> >>>http://image.yisou.com >> >>> >> >>>100兆邮箱够不够用?雅虎电邮自助扩容! >> >>>>http://cn.rd.yahoo.com/mail_cn/tag/100m/*http://cn.promo.yahoo.com/minisite/100m/ >> >>>_______________________________________________ >> >>>python-chinese list >> >>>python-chinese at lists.python.cn >> >>>http://python.cn/mailman/listinfo/python-chinese >> >>> >> > >> >limodou> = = = = = = = = = = = = = = = = = = = = >> > >> > >> >limodou> 致 >> >limodou> 礼! >> > >> > >> >limodou> limodou >> >limodou> chatme at 263.net >> >limodou> 2004-08-09 >> > >> > >> > >> >********************************************/ >> > >> >-- >> >Free as in Freedom >> > >> > [Zoom.Quiet] >> > >> >#=========================================# >> >]Time is unimportant, only life important![ >> >#=========================================# >> > >> >sender is the Bat!2.12.00 >> > >> >_______________________________________________ >> >python-chinese list >> >python-chinese at lists.python.cn >> >http://python.cn/mailman/listinfo/python-chinese >> > >> >> = = = = = = = = = = = = = = = = = = = = >> >> >> 致 >> 礼! >> >> >> limodou >> chatme at 263.net >> 2004-08-09 >> >> > _______________________________________________ >> python-chinese list >> python-chinese at lists.python.cn >> http://python.cn/mailman/listinfo/python-chinese >> > >_________________________________________________________ >Do You Yahoo!? >150万曲MP3疯狂搜,带您闯入音乐殿堂 >http://music.yisou.com/ >美女明星应有尽有,搜遍美图、艳图和酷图 >http://image.yisou.com >1G就是1000兆,雅虎电邮自助扩容! >http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/event/mail_1g/ >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! limodou chatme at 263.net 2004-08-09
2004年08月09日 星期一 20:57
杨元杰,您好! 首先每接到一个连接请求会生成一个新的connection,这是不一样的。新的与旧的不一样。线程启动时会将connection传入,但以后就不会再传入了。你看到的启动多次,但那是不同的线程,旧的线程不受影响。新的线程传入的又是新的 connection对象,因此没有关系。 所谓shared global memory那一定是指得同一个对象。你可以试着在每个线程开始处加入id(connection),看一看是否是同一个值。如果不是的话,就验证了每个线程得到的不是同一个connection对象,因此是不相冲突的。但如果是一个值的话,说明引用的是一个对象,这样connection就是shared global memroy了,这样就会冲突。试一试就知道是哪种情况了。 ======= 2004-08-09 20:36:59 您在来信中写道:======= > >limodou.你好 > 为什么connection不会改变呢? thread.start_new(handleClient, (connection,))中传递不是connection的引用嘛?connection不属于线程的Shared global memory 吗? > ps:再请教一下一个process启动了若干线程,那么它的Shared global memory 是什么?是不是这个process的中定义的变量,生成的实例? > > > > >> 杨元杰,您好! >> >> 每次connection都是一个新值。而线程A中的connection你并没有去改变,因此它永远使用的是旧的值。 >> >> ======= 2004-08-09 16:00:54 您在来信中写道:======= >> >> >大家好! >> >这是《programming python》10。4中的一个例子。这例子运行在服务器端,响应客户端的请求 >> >Example 10-7. PP2E\Internet\Sockets\thread-server.py >> >######################################################### >> ># Server side: open a socket on a port, listen for >> ># a message from a client, and send an echo reply; >> ># echos lines until eof when client closes socket; >> ># spawns a thread to handle each client connection; >> ># threads share global memory space with main thread; >> ># this is more portable than fork--not yet on Windows; >> >######################################################### >> > >> >import thread, time >> >from socket import * # get socket constructor and constants >> >myHost = '' # server machine, '' means local host >> >myPort = 50007 # listen on a non-reserved port number >> > >> >sockobj = socket(AF_INET, SOCK_STREAM) # make a TCP socket object >> >sockobj.bind((myHost, myPort)) # bind it to server port number >> >sockobj.listen(5) # allow up to 5 pending connects >> > >> >def now(): >> > return time.ctime(time.time()) # current time on the server >> > >> >def handleClient(connection): # in spawned thread: reply >> > time.sleep(5) # simulate a blocking activity >> > while 1: # read, write a client socket >> > data = connection.recv(1024) >> > if not data: break >> > connection.send('Echo=>%s at %s' % (data, now())) >> > connection.close() >> > >> >def dispatcher(): # listen until process killd >> > while 1: # wait for next connection, >> > connection, address = sockobj.accept() # pass to thread for service >> > print 'Server connected by', address, >> > print 'at', now() >> > thread.start_new(handleClient, (connection,)) >> > >> >dispatcher() >> > >> >我不明白的是: >> > 在函数dispatcher()中,当服务器接到一个请求,启动了一个线程A,在线程A运行过程中,服务器又街道另个client的请求,执行connection, address = sockobj.accept(),那么线程A中的connecion不是就会被覆盖了吗? >> > >> > >> > >> > >> > >> >------------------------------------------------------------------------------------- >> >15寸液晶双子星,震天雷II--D451¥2466/D353¥2399 http://design.163.com/aocmonitor/index.html >> >_______________________________________________ >> >python-chinese list >> >python-chinese at lists.python.cn >> >http://python.cn/mailman/listinfo/python-chinese >> > >> >> = = = = = = = = = = = = = = = = = = = = >> >> >> 致 >> 礼! >> >> >> limodou >> chatme at 263.net >> 2004-08-09 >> >> > >------------------------------------------------------------------------------------- >15寸液晶双子星,震天雷II--D451¥2466/D353¥2399 http://design.163.com/aocmonitor/index.html_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! limodou chatme at 263.net 2004-08-09
2004年08月09日 星期一 21:04
阅读 一切从游戏开始 抄书: def calc(seq): maximum = 0 max_item = [] for i in seq: product = (i[0]*100 + i[1]*10 + i[2]) * (i[3]*10 + i[4]) if product > maximum: maximum = product max_item = i elif product == maximum: max_item += ','+i return max_item, maximum seq = [ [5,6,7,8,9], [5,6,7,9,8] ] max_item,maximum = calc(seq) print "Maximum at", max_item, ",product", maximum 命令行下:C:\pylearn\first-step>python 1.py Traceback (most recent call last): File "1.py", line 15, in ? max_item,maximum = calc(seq) TypeError: unpack non-sequence 这是怎么回事情?! 2004-08-09
2004年08月09日 星期一 21:11
詹建,您好! 看程序calc应该返回一个二元组的tuple,但错误提示说返回的不是tuple.好象calc最后的return 缩近有问题,应该提前一个缩近位。还有一个测试的方法,就是在calc调用处,直接将结果先打出来看一看,看是不是一个二元组的tuple。 print calc(seq) ======= 2004-08-09 21:04:05 您在来信中写道:======= >阅读 一切从游戏开始 > >抄书: >def calc(seq): > maximum = 0 > max_item = [] > > for i in seq: > product = (i[0]*100 + i[1]*10 + i[2]) * (i[3]*10 + i[4]) > if product > maximum: > maximum = product > max_item = i > elif product == maximum: > max_item += ','+i > return max_item, maximum > >seq = [ [5,6,7,8,9], [5,6,7,9,8] ] >max_item,maximum = calc(seq) >print "Maximum at", max_item, ",product", maximum > > >命令行下:C:\pylearn\first-step>python 1.py >Traceback (most recent call last): > File "1.py", line 15, in ? > max_item,maximum = calc(seq) >TypeError: unpack non-sequence > >这是怎么回事情?! > > 2004-08-09 >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! limodou chatme at 263.net 2004-08-09
2004年08月09日 星期一 21:20
limodou,您好! 3KU 非常谢谢 是缩近有问题 ======= 2004-08-09 21:11:06 您在来信中写道:======= >詹建,您好! > > 看程序calc应该返回一个二元组的tuple,但错误提示说返回的不是tuple.好象calc最后的return 缩近有问题,应该提前一个缩近位。还有一个测试的方法,就是在calc调用处,直接将结果先打出来看一看,看是不是一个二元组的tuple。 > > print calc(seq) > >======= 2004-08-09 21:04:05 您在来信中写道:======= > >>阅读 一切从游戏开始 >> >>抄书: >>def calc(seq): >> maximum = 0 >> max_item = [] >> >> for i in seq: >> product = (i[0]*100 + i[1]*10 + i[2]) * (i[3]*10 + i[4]) >> if product > maximum: >> maximum = product >> max_item = i >> elif product == maximum: >> max_item += ','+i >> return max_item, maximum >> >>seq = [ [5,6,7,8,9], [5,6,7,9,8] ] >>max_item,maximum = calc(seq) >>print "Maximum at", max_item, ",product", maximum >> >> >>命令行下:C:\pylearn\first-step>python 1.py >>Traceback (most recent call last): >> File "1.py", line 15, in ? >> max_item,maximum = calc(seq) >>TypeError: unpack non-sequence >> >>这是怎么回事情?! >> >> 2004-08-09 >>_______________________________________________ >>python-chinese list >>python-chinese at lists.python.cn >>http://python.cn/mailman/listinfo/python-chinese >> > >= = = = = = = = = = = = = = = = = = = = > > > 致 >礼! > > > limodou > chatme at 263.net > 2004-08-09 > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! 詹建 flysmart at 163.com 2004-08-09
Zeuux © 2024
京ICP备05028076号