Python论坛  - 讨论区

标题:=?GB2312?Q?Re: Re: [python-chinese] =B0=EF=CE=D2=BF=B4=BF=B4=D5=E2=B8=F6=B3=CC=D0=F2?=

2005年05月28日 星期六 13:35

BaoYongjun byj at net.pku.edu.cn
Sat May 28 13:35:36 HKT 2005

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




[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号