免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2438 | 回复: 4
打印 上一主题 下一主题

[求助]帮忙debug一下我的多线程程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-07 18:48 |只看该作者 |倒序浏览
class ListenThread(threading.Thread):
    def __init__(self,server):
        threading.Thread.__init__(self)
        self.server = server
    def run(self):
        while 1:
            self.client, addr = self.server.accept()
            data = self.client.recv(1024)
            file = os.open(data, os.O_WRONLY|os.O_CREAT|os.O_EXCL)
            while 1:
                rdata = self.client.recv(1024)
                if not rdata:
                    break
                os.write(file, rdata)
            os.close(file)
            self.client.close()

上面是一个子线程的类,下面是主线程中的一段代码,在执行过程中,print 'ListenThread start !!!'可以正常显示出来,可是当执行完run方法后应该要显示print 'ListenThread finished !!!',却一直没有显示,程序貌似一直在等待,ctrl-c中断程序后,经md5验证文件传输却是正常的,本程序是一个简单的文件传输程序,c/s模式,贴出来的代码都是server端的

        self.LT = ListenThread(server)
        self.LT.setDaemon(True)
        print 'ListenThread start !!!'
        self.LT.run()
        print 'ListenThread finished !!!'
请教一下问题出在哪里,应该是文件传输完了以后,程序就正常退出

论坛徽章:
0
2 [报告]
发表于 2008-04-07 19:30 |只看该作者
外层循环啥时候退出?

论坛徽章:
0
3 [报告]
发表于 2008-04-07 21:29 |只看该作者
这些代码我是按照书上的例子经过修改后得来的
按照书上代码的思想是不退出循环,所以用了一个线程来循环监听
在主线程中的socket实例,用listen(1)来实现对一个请求的处理

论坛徽章:
0
4 [报告]
发表于 2008-04-08 00:26 |只看该作者
启动线程是不是要用LT.start()啊??
主线程是不是执行完print 'ListenThread finished !!!'  就退出了?是的话应该要等调度到才行吧?
另外这样写如果文件没有传完主线程就被调用退出了咋办?

论坛徽章:
0
5 [报告]
发表于 2008-04-08 10:14 |只看该作者
谢谢楼上兄弟
昨晚看另外一份关于python多线程编程的资料时才理解要用start(),之前还以为是书上的错误呢
今天在重新改改,希望没有问题吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP