您的位置:首页 > 编程语言 > Python开发

Python使用多进程(核)外壳

2011-10-17 11:19 281 查看
大家都知道Python的线程实际上是使用单核在运行,所以大多数想使用多核来运算,Python自己也提供了很多分布式框架,比如pp,pprocess等等,其中有网络分布式,也有单机分布式,详情可参见:http://wiki.python.org/moin/ParallelProcessing

其中本人也研究过几个分布式框架,感觉还是非常强大的,但多多少少存在不足(主要取决于需求)和一定复杂度(框架学习),工作中涉及到一个很简单的使用多核计算模型,自己写了一个使用多核的外壳和大家分享一下:

#!/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脚本则是真正的单进程执行脚本,可根据具体需求编写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: