Python论坛  - 讨论区

标题:[python-chinese] 帮我看看这个程序

2005年05月27日 星期五 20:02

BaoYongjun byj at net.pku.edu.cn
Fri May 27 20:02:41 HKT 2005

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



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

2005年05月28日 星期六 11:39

Qiangning Hong hongqn at gmail.com
Sat May 28 11:39:57 HKT 2005

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>

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号