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号