Python中文
首页
教程
问答
标签
搜索
登录
注册
使用Python多处理降低执行速度
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我可能有点过头了,但我正在用python开发一个小的生物信息学项目。我正在尝试并行化一个程序,该程序分析一个包含字符串集的大字典(RAM中为~2-3GB)。我发现多处理版本在我使用较小的字典时速度更快,但是对于大型字典则没有什么好处,而且大多数情况下速度较慢。我的第一个理论是内存不足会减慢一切,而瓶颈是从交换到虚拟内存。但是,我在一个有4*48GB内存的集群上运行这个程序,同样的速度减慢了。我的第二个理论是对某些数据的访问被锁定了。如果一个线程正在尝试访问另一个线程中当前正在访问的引用,该线程是否必须等待?我试着复制我想操作的词典,但那似乎效率极低。还有什么会导致我的问题?在</p> <p>我的多重处理方法如下:</p> <pre><code>def worker(seqDict, oQueue): #do stuff with the given partial dictionary oQueue.put(seqDict) oQueue = multiprocessing.Queue() chunksize = int(math.ceil(len(sdict)/4)) # 4 cores inDict = {} i=0 dicts = list() for key in sdict.keys(): i+=1 if len(sdict[key]) > 0: inDict[key] = sdict[key] if i%chunksize==0 or i==len(sdict.keys()): print(str(len(inDict.keys())) + ", size") dicts.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(copy(inDict)) inDict.clear() for pdict in dicts: p =multiprocessing.Process(target = worker,args = (pdict, oQueue)) p.start() finalDict = {} for i in range(4): finalDict.update(oQueue.get()) return finalDict </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>通过队列的每个数据都将使用pickle进行序列化和反序列化。我想这可能是一个瓶颈,如果你通过大量的数据轮。在</p> <p>您可以减少数据量,利用共享内存,在c扩展中编写多线程版本,或者使用python的多线程安全实现尝试多线程版本(可能是jython或pypy;我不知道)。在</p> <p>哦,顺便说一句:您使用的是多处理而不是多线程。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
VirtualEnvRapper错误:路径python2(来自python=python2)不存在
9 回答
virtualenvs上的pyinstaller,没有名为导入错误的模块
1 回答
virtualenvs是否可以退回到用户包而不是系统包?
3 回答
virtualenvwrapper CentOS7
4 回答
virtualenvwrapper IOError:[Errno 13]权限被拒绝
7 回答
virtualenvwrapper mkproject和shell在windows中的启动问题?
6 回答
virtualenvwrapper mkvirtualenv不工作但没有错误
9 回答
Virtualenvwrapper python bash
5 回答
virtualenvwrapper:“workon”何时更改到项目目录?
5 回答
virtualenvwrapper:mkvirtualenv可以工作,但是rmvirtualenv返回bash:没有这样的文件或目录
5 回答
virtualenvwrapper:virtualenv信息存储在哪里?
3 回答
virtualenvwrapper:命令“python设置.pyegg_info“失败,错误代码为1
10 回答
virtualenvwrapper:如何将mkvirtualenv的默认Python版本/路径更改为ins
4 回答
Virtualenvwrapper:模块“pkg_resources”没有属性“iter_entry_points”
8 回答
Virtualenvwrapper:没有名为virtualenvwrapp的模块
8 回答
Virtualenvwrapper.bash_profi的正确设置
1 回答
Virtualenvwrapper.hook:权限被拒绝
4 回答
virtualenvwrapper.sh:fork:资源暂时不可用Python/Djang
1 回答
Virtualenvwrapper.shlssitepackages命令不工作
5 回答
Virtualenvwrapper.sh函数在bash sh中不可用
10 回答