Python使用多进程(核)外壳
大家都知道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脚本则是真正的单进程执行脚本,可根据具体需求编写。
以上是 Python使用多进程(核)外壳 的全部内容, 来源链接: utcz.com/z/387829.html