2005年05月28日 星期六 13:35
Qiangning Hong,您好! 代码中只开了4个线程,10个线程也跑过,都是同样的问题,服务器端没问题,如果讲客户端改成单线程的,同时起10个客户端,就可以执行,不会出现,一个执行完,其他就僵死的问题. 服务器端我试了两个方法,一开始是调用select.select()后来采用asnycore模块,都出现同样的问题. BTW: 还发现一个有意思的,服务器端采用select.select,socket采用阻塞调用,在一个客户端的情况下,速度明显比服务器端采用asnycore+非阻塞调用快很多 大概客户端速度前者是后者的三倍(3MB/s vs.9MB/s),随着客户端增多,asnycore+非阻塞调用的速度反而加快.比如,我在同一机器上同时跑了5个客户端, 单个客户端下载速度有将近2MB/s ,5个合起来就是10MB/s ======= 2005-05-28 11:39:00 您在来信中写道:======= >On 5/27/05, BaoYongjun <byj at net.pku.edu.cn> wrote: >> python-chinese,您好! >> 一个文件传输客户端模拟程序.创建了n=10个线程与服务器连接,接受服务器传送的数据.问题是这样的:10个线程开始运行后,分别接受了一部分数据,然后就出现问题,某一个线程一下子接受完数据,其他9个线程就'死'在那里,不接受数据了(服务器端显示发送缓冲区满了) ,似乎是没有被调度执行. > >#client.py >import threading,socket,select,time >def f(): > iTime=time.time() > f=open('target.txt.'+`iTime`,'w') > >[snip] > >> def main(): >> threads=[] >> for i in range(4): >> t=threading.Thread(target=f) >> t.start() > >[snip] > >粗略看了一下你的程序,没有发现什么问题。会不会是服务器端的处理有问题? >你说开了10个线程,而你贴出来的代码里只开了4个线程,怀疑你只贴出了部分代码,也可能是你没贴的那部分有问题。 > >还有一个疑问,f = open('target.txt.'+`iTime`,'w'),你是怎么保证各个线程打开不同文件的? > > >-- >Qiangning Hong >Get Firefox! <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1> >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese = = = = = = = = = = = = = = = = = = = = 致 礼! BaoYongjun byj at net.pku.edu.cn 2005-05-28
Zeuux © 2025
京ICP备05028076号