Python使用多进程(核)外壳
2011-10-17 11:19
281 查看
大家都知道Python的线程实际上是使用单核在运行,所以大多数想使用多核来运算,Python自己也提供了很多分布式框架,比如pp,pprocess等等,其中有网络分布式,也有单机分布式,详情可参见:http://wiki.python.org/moin/ParallelProcessing
其中本人也研究过几个分布式框架,感觉还是非常强大的,但多多少少存在不足(主要取决于需求)和一定复杂度(框架学习),工作中涉及到一个很简单的使用多核计算模型,自己写了一个使用多核的外壳和大家分享一下:
其中worker.py脚本则是真正的单进程执行脚本,可根据具体需求编写。
其中本人也研究过几个分布式框架,感觉还是非常强大的,但多多少少存在不足(主要取决于需求)和一定复杂度(框架学习),工作中涉及到一个很简单的使用多核计算模型,自己写了一个使用多核的外壳和大家分享一下:
#!/usr/bin/env python # encoding: utf-8 """ ppworker.py 启动多个worker服务进程 option: -n: start worker num -h: print help info Created by zhoubo on 2011-09-26. """ import time import traceback import subprocess import getopt import sys import os abspath = os.path.dirname(os.path.abspath(__file__)) ncpus = 4 #使用CPU数 def main(): """main docstring""" try: opts, args = getopt.getopt(sys.argv[1:],'hn:') except getopt.GetoptError, e: print e print __doc__ return for k, v in opts: if k == '-n': ncpus = int(v) else: print __doc__ return ncpus = ncpus > 0 and ncpus or 1 jobs = [] cmd = ('python', os.path.join(abspath, 'worker.py')) while True: if len(jobs) < ncpus: sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) jobs.append(sp) for sp in jobs: if sp.poll() is not None: jobs.remove(sp) if len(jobs) == ncpus: time.sleep(60) if __name__ == '__main__': main()
其中worker.py脚本则是真正的单进程执行脚本,可根据具体需求编写。
相关文章推荐
- Python3使用多进程和多线程的方式检查网络状态
- python多进程中使用pool
- python在linux下使用多进程遇到3770问题解决方法
- python多进程multiprocessing的简单使用
- Python多进程使用方法
- 为什么在Python里推荐使用多进程而不是多线程?
- 浅析Python中的多进程与多线程的使用
- 【多进程与多线程】为什么在Python里推荐使用多进程而不是多线程?
- 为什么在Python里推荐使用多进程而不是多线程?
- python中map多进程使用方法
- Python中的多进程与多线程/分布式该如何使用
- 在python多进程中使用manager和Barrier
- python(34):为什么在Python里推荐使用多进程而不是多线程?
- python 2.7 类中使用多进程(multiprocessing)执行类函数时的问题
- python使用多进程
- Python中使用多进程复制文件
- 为什么在Python里推荐使用多进程而不是多线程?
- 为什么在Python里推荐使用多进程而不是多线程?
- Python多进程multiprocessing使用示例
- python多进程共享变量Value使用tips