{"title": "python\u53c2\u8003\u7247\u6bb5", "update_time": "2014-02-08 17:47:10", "tags": "\u53c2\u8003\u7247\u6bb5", "pid": "251", "icon": "python.png"}
**本文用来记录常用的python片段** python并发处理小框架 ``` python #!/usr/bin/env python import Queue import sys import threading import commands class MutiThread(threading.Thread): def __init__(self,target_queue,run_job,r_queue): self.tq = target_queue self.rb = run_job self.rq = r_queue threading.Thread.__init__(self) def run(self): while True: try: tname = self.tq.get(False) self._process_job(tname) except Queue.Empty: break def _process_job(self,target): self.rq.put(self.rb['m_fun'](target)) class MutiRunner(): def __init__(self,target_queue,run_job,concurrency): self.concurrency=concurrency self.target_queue=target_queue self.run_job=run_job self.resultqueue=Queue.Queue(0) self.total=self.target_queue.qsize() def start(self): for i in range(1,self.concurrency): MutiThread(self.target_queue,self.run_job,self.resultqueue).start() while self.total>0: try: ro=self.resultqueue.get() self.total=self.total-1 self.run_job['r_fun'](ro) except Queue.Empty: break def domd5sum(target): res=commands.getstatusoutput("md5sum "+target) return res def reader(target): print target[1] if __name__=='__main__': diskname=sys.argv[1] runqueue=Queue.Queue(0) for i in commands.getoutput("find /"+diskname+"/data/ -name \"blk*\" | grep meta").split('\n'): runqueue.put(i) mr=MutiRunner(runqueue,{'m_fun':domd5sum,'r_fun':reader},2) mr.start() ```