免费注册 查看新帖 |

Chinaunix

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

python 多线程 卡住问题 [复制链接]

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-24 15:32 |只看该作者 |倒序浏览
  1. class M(threading.Thread):
  2.     def __init__(self,a,b,c,d,e):
  3.         ....
  4.     def run(self):
  5.         ....

复制代码
a,b,c,d,e 这些参数都是放在一个文本文件里面的.. 有很多行

目前的的方法是
for line in open("xx.txt"):
     ......      #split 处理
     ins = M(......)
     ins.start()
      

这样运行的时候 有时候会卡住... 不知道什么问题.. 报错什么的都没有..

如果在ins.start() 之后
我加个join 这样跑的时候就变了串行了.. 这样没什么问题,但是太慢 影响效率
但是我想让他批量跑

就解决办法

ps. run() 实现的功能没有共享资源.. 所以没有必要加锁啊..

论坛徽章:
0
2 [报告]
发表于 2013-06-24 16:23 |只看该作者
贴你run里面的代码看看

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
3 [报告]
发表于 2013-06-24 17:11 |只看该作者
回复 2# laike9m


   def run(self):
                try:
                        tn = telnetlib.Telnet(self.host,self.port,timeout=3)
                except:
                        print "The %s:%s Host is Not reachable!" %(self.host,self.port)
                        os.sys.exit()
                child = pexpect.spawn('ssh -l%s -p%s %s -q %s' %(self.user,self.port,self.host,self.cmd),timeout=3000)
                index = child.expect([pexpect.EOF,pexpect.TIMEOUT,"(yes/no)","assword:","Diened"])
                if index == 0:
                        print "the Host %s is not connected!" %(self.host)
                elif index == 1:
                        print " To the Host %s is Timeout!" %(self.host)
                elif index == 2:
                        child.sendline("yes")
                        child.expect("assword:")
                        child.sendline(self.password)
                        inner = child.expect(["LDAP",pexpect.EOF])
                        if inner == 0:
                                print "Password Error"
                        elif inner == 1:
                                print child.before
                                child.close()
                elif index == 3:
                        child.sendline(self.password)
                        inner = child.expect(["LDAP",pexpect.EOF])
                        if inner == 0:
                                print "Password Error"
                        elif inner == 1:
                                print child.before
                                child.close()
                                
                                print "This is %s" %(self.getName())
                elif index == 4:
                        print "The host %s is Need LDAP Auth!" %(self.host)

                elif index == 5:
                        print "%s is Diened!!" %(self.host)

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
4 [报告]
发表于 2013-06-24 19:00 |只看该作者
求助啊

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
5 [报告]
发表于 2013-06-25 11:17 |只看该作者
回复 3# Linux_manne


    这个问题,你最好不要用线程来做,用进程,如果真的想做,最好用GEVENT来做,因为在 python所有的线程实际上是假线程,因为它是PIL的原因,所以,一定是一个线程来运行的。这样,可以提高你的运行效率。

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
6 [报告]
发表于 2013-06-25 11:48 |只看该作者
回复 5# jeppeter


    嗯.. 谢谢您 用多进程 是没有问题了.. 就是我觉得奇怪呀.. 为什么会卡住呢... 求原理~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP