2005年05月27日 星期五 20:02
python-chinese,您好! 一个文件传输客户端模拟程序.创建了n=10个线程与服务器连接,接受服务器传送的数据.问题是这样的:10个线程开始运行后,分别接受了一部分数据,然后就出现问题,某一个线程一下子接受完数据,其他9个线程就'死'在那里,不接受数据了(服务器端显示发送缓冲区满了) ,似乎是没有被调度执行. #client.py import threading,socket,select,time def f(): iTime=time.time() f=open('target.txt.'+`iTime`,'w') sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((strIP,iPort)) respon='1' size=0 i=time.time() while True: respon=sock.recv(8192) if not respon: break f.write(respon) size+=len(respon) j=time.time() print 'average speed is: ',size/(j-i),'B/s' return def main(): threads=[] for i in range(4): t=threading.Thread(target=f) t.start() threads.append(t) time.sleep(1) for t in threads: t.join() if __name__=='__main__': main() #f() 致 礼! BaoYongjun byj at net.pku.edu.cn 2005-05-27
2005年05月28日 星期六 11:39
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>
Zeuux © 2025
京ICP备05028076号