主要是抄峰云的这篇博客
http://xiaorui.cc/2015/05/28/在python中使用gevent-subprocess实现shell调用/
不过还是有一些小细节不同
要用joinall来等待子协程完成
有的情况需要异步调用,不用pipe就可以了
配合web框架,把一些系统命令改造成web接口还是比较轻松的。
#!/bin/env python
#encoding=gbk
#gevent+subprocess
from gevent.pool import Pool
from gevent.subprocess import Popen, PIPE
import os
import sys
import gevent
def worker():
print 'start'
sub = Popen(['sleep 5'], stdout=PIPE, shell=True)
# sub = Popen(['top'], stdout=PIPE, shell=True)
out, err = sub.communicate()
print sub.returncode
#gevent.sleep(0.1);
return out.rstrip()
def asynworker():
print 'start'
sub = Popen(['sleep 5 &'], shell=True)
#sub = Popen(['sleep 5'], stdout=PIPE, shell=True)
err = sub.communicate()
print sub.returncode
#gevent.sleep(0.1);
return
def run():
g=[]
for i in range(10):
print i
#g = gevent.spawn(asynworker)
g.append(gevent.spawn(worker))
gevent.joinall(g)
if '__main__' == __name__:
'''耗时 10.0609869957
'''
import time
start_at = time.time()
run()
print time.time() - start_at