Python使用多進程(核)外殼

來源:互聯網
上載者:User

大家都知道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指令碼則是真正的單進程執行指令碼,可根據具體需求編寫。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.