我有幾百盒只能用不同的網關訪問,如下面所示:如何在使用多處理時將env.host轉換爲結構?
gateway1:ip1,ip2
gateway2:ip3,ip4 ...
所有作業不需要在一分鐘內完成的,所以我在下面使用下面的命令fab -f ytj_sto.py doitnow
多進程,錯誤。
[]
None
None
***Warning*** Host None via ssh is down
代碼:
@parallel(pool_size=20)
def coll():
print env.hosts
print env.host
print env.gateway
if _is_ssh_ok(env.host):
d = patt()
def doitnow():
p=Pool(20)
with open('ytj_sto.hn','r') as f:
for line in f.readlines():
line = line.strip()
if not len(line) or line.startswith('#'):
continue
env.gateway = line.split(':')[0]
env.hosts = line.split(':')[1].split(',')
result = p.apply_async(coll, args=())
result.get()
p.close()
p.join()
編輯: 我用FAB -H -g解決這個問題,感謝所有
def fabfun(Hosts,Gate,des,func1):
with settings(hide('running'), warn_only=True):
local(("fab -H %s -g %s -f %s %s ") % (Hosts,Gate,des,func1))
p=Pool(20)
starttime = time.asctime(time.localtime(time.time()))
print('Waiting for all job done...%s' % starttime)
with open('ytj_sto.hn','r') as f:
for line in f.readlines():
line = line.strip()
if not len(line) or line.startswith('#'):
continue
Hosts = line.split(':')[1]
Gate = line.split(':')[0]
p.apply_async(fabfun, args=(Hosts,Gate,des,func1))
p.close()
p.join()
在哪裏布任務('patt')你想打電話?你是如何實現'_is_ssh_ok'的? – 2ps