免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教一个多线程处理的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-29 16:34 |只看该作者 |倒序浏览
小弟用shell写了个多进程的东东,有点问题想请教下各位大侠

A文件,里面大量数据
现在想写个shell脚本读取A文件处理后放入数据库,想法是先算出A文件的总行数,然后分成多个行数,利用多进程叠加行数读取文件然后去处理导入数据库,利用网上的脚本修改之后发现时间反而延长了。求大侠指点怎样写比较高效,谢谢。

论坛徽章:
0
2 [报告]
发表于 2012-08-29 16:43 |只看该作者
回复 1# redir


    一般来讲,所有涉及IO的多进程,其瓶颈大多会在IO上
如果你使多个进程再读取同一个文件,可能又会遇到文件资源竞争的问题

没啥具体经验唉,随便讲两句,等高人出现吧
不过,对于计算行数之类的步骤,我建议直接把文件分割,用split命令之类的。。

论坛徽章:
0
3 [报告]
发表于 2012-08-29 16:45 |只看该作者
谢谢。计算行数我算出总行数,然后除以10,来做了,感觉这样还方便点?

论坛徽章:
0
4 [报告]
发表于 2012-08-29 16:55 |只看该作者
回复 3# redir


    NAME
       split - split a file into pieces

SYNOPSIS
       split [OPTION]... [INPUT [PREFIX]]

DESCRIPTION
       Output  fixed-size  pieces of INPUT to PREFIXaa, PREFIXab, ...; default
       size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or  when
       INPUT is -, read standard input.

论坛徽章:
0
5 [报告]
发表于 2012-08-29 17:46 |只看该作者
用了下,感觉不错,继续求高人指点

论坛徽章:
0
6 [报告]
发表于 2012-08-29 21:13 |只看该作者
继续求教,比如文件夹内已经将文件A切分成为a、b、c、d、e、f、g几个文件,如何多线程去同时处理这些文件呢?比如一个线程处理a、b、c,另外一个线程处理e、f、g,求大侠指点!

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2012-08-30 08:30 |只看该作者
是这个意思?
  1. script 1
  2. for file in a b c d e
  3. do
  4.    # your commands
  5. done
复制代码
  1. script 2
  2. for file in f g h i
  3. do
  4.    # your commands
  5. done
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-08-30 09:44 |只看该作者
感谢rdcwayx大大,但是文件夹内不止a、b、c、d、e、f、g这些文件的,日志文件非常大,切割之后有几百个。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
9 [报告]
发表于 2012-08-30 12:15 |只看该作者
本帖最后由 rdcwayx 于 2012-08-30 14:16 编辑

假设,你用split 分割好文件,100行一个文件,用数字后缀.
  1. split -l 100 -d  fileA
复制代码
这样的话,你就会得到很多小文件, fileA000, fileA001, .... fileA999, 如果分割文件超过1000个的话,后面的数字可能是4位。

将下面的代码存成一个文件,比如 redir.sh
  1. min=$1
  2. max=$2
  3. for file in `eval echo fileA{$min..$max}`
  4. do
  5.   echo $file
  6.   # put your SQL command here.
  7. done
复制代码
连续开几个console, 运行如下命令;
  1. ./redir.sh 000 099
  2. ./redir.sh 100 199
  3. .....
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-08-30 14:38 |只看该作者
感谢rdcwayx大大,问题已解决
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP