设为首页
优惠IDC
收藏本站
六狼博客
六狼论坛
开启辅助访问
切换到窄版
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
只需一步,快速开始
快捷导航
门户
首页
BBS
云计算
大数据
手机
移动开发android,ios,windows phone,windows mobile
编程
编程技术java,php,python,delphi,ruby,c,c++
前端
WEB前端htmlcss,javascript,jquery,html5
数据库
数据库开发Access,mysql,oracle,sql server,MongoDB
系统
操作系统windows,linux,unix,os,RedHat,tomcat
架构
项目管理
软件设计,架构设计,面向对象,设计模式,项目管理
企业
服务
运维实战
神马
搜索
搜索
热搜:
php
java
python
ruby
hadoop
sphinx
solr
ios
android
windows
centos
本版
帖子
用户
六狼论坛
»
首页
›
云计算
›
云计算
›
算法与数据结构
›
基于内存共享的并行排序算法慢谈(下) ...
返回列表
查看:
187
|
回复:
0
基于内存共享的并行排序算法慢谈(下)
[复制链接]
2010Freeze
2010Freeze
当前离线
积分
350
窥视卡
雷达卡
升级
50%
当前用户组为
举人
当前积分为
350
, 升到下一级还需要 150 点。
108
主题
108
主题
108
主题
举人
举人, 积分 350, 距离下一级还需 150 积分
举人, 积分 350, 距离下一级还需 150 积分
积分
350
发消息
楼主
|
发表于 2012-12-13 21:26:35
|
显示全部楼层
|
阅读模式
基于内存共享的并行排序算法慢谈(下)
<div id="cnblogs_post_body">题目再现:请用Python多线程对一个4G以上的文件, 进行外排序,尽量优化性能。假设系统内核数为8,Mem=512MB,关键字是字符串
6.实验
6.1python多线程
关于python多线程可以参考:
http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html
python的多线程机制和Java很像,这里就不多讲了。似乎没有涉及到共享变量,锁也不用了。
6.2问题解决思路
我也想过先划分数据再交给线程,但是没试过,感觉需要很多内存,搞不好还会浪费。
第三个非常恶劣的问题就是,线程里面新建线程会产生很多问题,具体我说不清楚。
第四个问题就是,pdb调试无法在线程里面 设置断点,线程的问题无法跟踪,可能是我太蠢了。
由于以上问题,我最好只能换了一种方法,就是用前面提到的算法间并行。
开始时主线程读取数据,每读到一定量时就开辟一个新的线程,把线程插入到一个队列里。
主线程把读到的数据块交给线程排序。线程启动,线程排完序后会将结果输出到文件。
主线程每次读新数据的时候,先判断下是否还有足够内存开瓶新的数据。若没有则等待线程队里的第一个线程结束。
因为第一个线程是最先开辟的,它结束后就可以释放内存了。
当主线程读完所有数据时,等待线程队列里的所有线程结束。
然后主线程使用归并思想对子文件数据进行归并,并输出到最终文件。
在归并的时候,若内存有多,尽量预取数据。
6.3完整代码
<div class="cnblogs_code" >
产生待排序数据<div id="cnblogs_code_open_44de23ee-5f51-41b7-ad4b-8ef8fb0b32e9" class="cnblogs_code_hide">
1
import
random
2
3
def
generatekey(num):
4
str =
[]
5
while
num >
0:
6
str.append(chr(random.randint(97, 122
)))
7
num = num - 1
8
str.append(
'
\n
'
)
9
return
''
.join(str)
10
11
print
'
please enter the number
'
12
N =
input()
13
f=open(
'
unsortdata
'
,
'
w
'
)
14
while
N >
0:
15
str = generatekey(30
)
16
f.write(str)
17
N = N - 1
18
19
f.close()
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2008-2020
六狼论坛
(http://it.6wolf.com) 版权所有 All Rights Reserved.
Powered by
Discuz!
X3.4
京ICP备14020293号-2
本网站内容均收集于互联网,如有问题请联系
QQ:389897944
予以删除
快速回复
返回顶部
返回列表