免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fandatou
打印 上一主题 下一主题

请问pyhon开多线程费内存吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-22 15:50 |显示全部楼层 |倒序浏览
我写了一个验证代理服务器匿名程度的perl脚本,开了5个线程去访问被测页面。脚本一开60M内存没了,检测完358个代理服务器后,内存占用高达200M。我就开了5个线程为啥么perl多线程这么废内存。

过几天我要写一个9线程脚本,每个线程要连续访问499个页面并处理信息,请问诸位高手pyhton多线程处理能力如何,内存使用情况如何?是否稳定?

论坛徽章:
0
2 [报告]
发表于 2006-03-28 14:20 |显示全部楼层
不是说perl坏话,我的程序大部分都是perl的。我现在处理22个服务器的信息,还有100多台服务器的信息没弄呢,必须为将来考虑。

论坛徽章:
0
3 [报告]
发表于 2006-11-12 19:00 |显示全部楼层
哈哈,把程序修改为30线程的,内存直接奔1G去了。

论坛徽章:
0
4 [报告]
发表于 2006-11-13 23:36 |显示全部楼层
每干啥,就是抓下来网页用正则把需要的数据取下来。刚修改了下程序,不指定每次线程启动数,程序效率提升不少,从33/分钟 提升到50个/分钟. 内存就剩下1008k。

我的程序就是单线程也一样运行时间长了就会占用很大内存,不知道为啥perl不自己清理吓

论坛徽章:
0
5 [报告]
发表于 2006-12-10 16:45 |显示全部楼层
经过测试python不费内存,程序跑起来只有了41M内存,其中包含一个9M的 list,CPU倒是一直100%
跟我的perl倒是相得益彰,一个用内存一个用cpu,各取所需

论坛徽章:
0
6 [报告]
发表于 2006-12-11 14:59 |显示全部楼层
近来看到google用的python写的爬虫,一台机器能维护300个线程,我这里5个线程就cpu100%了。为啥呢?笔记本是迅驰1.4的 server是志强2G +2M 的 都是100%

论坛徽章:
0
7 [报告]
发表于 2006-12-11 15:21 |显示全部楼层
不明白,我就是开5个线程去抓网页,抓下来后正则分解写数据库,然后返回。

论坛徽章:
0
8 [报告]
发表于 2006-12-14 01:07 |显示全部楼层
抓网页和写数据库都用try包围起来了。跑一些比较快的网站也cpu也是很高,回头弄个本地webserver试试看看开300个线程如何。

论坛徽章:
0
9 [报告]
发表于 2006-12-19 23:41 |显示全部楼层
抓网站的代码在这里
  1. def openurl(id):
  2.     url ="""http://""" + str(id) + """.xxx.com"""
  3.     print url
  4.     try:
  5.         html_date = urllib.urlopen(url).read()
  6.         #print html_date
  7.     except:
  8.         print 'find a error'
  9.         pass
  10.     else:
  11.         logfile='log/' + str(id) +".html"
  12.         open(logfile,'w').write(html_date)
  13.         error_re=re.compile(r"""(数据库暂时没有您要查找的数据)""")
  14.         companyinfo_re=re.compile(r"""<font style="font-size:12pt">(.*?)</font>""", re.S|re.M)
  15.         Mobile_re=re.compile(r"<td align=center>手机:</td>.*?<td align=center>(.*?)</td>", re.S|re.M)
  16.         Fax_re=re.compile(r"<td align=center>传真:</td>.*?<td align=center>(.*?)</td>", re.S|re.M)
  17.         clear_re= re.compile( r"(<.*?>|&nbsp;|\s+|\n|\t|\r|\\|/|')")
  18.         info_re=re.compile(r"(企业类型|.....|管理体系认证):</b></td>.*?<t.*?>(.*?)</td>", re.S|re.M)
  19.         db_user = ""
  20.         db_pw = ""
  21.         db = MySQLdb.connect("localhost", db_user, db_pw ,"。。。")
  22.         c = db.cursor()
  23.         if error_re.search(html_date):
  24.             print "数据库暂时没有您要查找的数据"
  25.             open('error.log','a').writelines(str(id)+"\n")
  26.             return
  27.         try:
  28.             
  29.             if info_re.finditer(html_date):
  30.                 companyinfo_group=companyinfo_re.search(html_date)
  31.                 temp_info=companyinfo_group.groups()[0]
  32.                 company_info=clear_re.sub('',temp_info)
  33.                 mobile_group=Mobile_re.search(html_date)
  34.                 mobile=clear_re.sub('',mobile_group.groups()[0])
  35.                 print mobile
  36.                 Fax_group=Fax_re.search(html_date)
  37.                 Fax=clear_re.sub('',Fax_group.groups()[0])
  38.                 print Fax
  39.                 company_dict={"":""}
  40.                 for m in info_re.finditer(html_date):
  41.                     info_cat=m.groups()[0]
  42.                     name=clear_re.sub('',m.groups()[1])
  43.                     company_dict[info_cat]=name
  44.                     print "%s %s %s " % (info_cat , "," ,name)
  45.                    insert_data="insert  into company (Company_ID.....) values ('" + str(id) + "' ..... +"')"
  46.                 c.execute(insert_data)
  47.                 open('work.log','a').writelines(str(id)+"\n")
  48.                 return
  49.             else:
  50.                 print "open url error"
  51.                 open('error.log','a').writelines(str(id)+"\n")
  52.                 return
  53.             
  54.         except:
  55.             print "数据有错误"
  56.             open('error.log','a').writelines(str(id)+"\n")
  57.             return

  58.             
  59.     #print url
复制代码

[ 本帖最后由 fandatou 于 2006-12-19 23:43 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2007-09-02 18:26 |显示全部楼层
嘻嘻,perl费内存,python的费点cpu,同样的程序写了2个版本的,2.4Gcpu和2
G内存物尽其用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP