下面的demo是根據(jù)需求寫(xiě)的簡(jiǎn)單測(cè)試腳本
#!/usr/bin/env python# coding: utf-8# 第一個(gè)列表為依賴組件和版本號(hào),后面緊跟負(fù)責(zé)人名稱# 接著出現(xiàn)第二個(gè)以來(lái)組建列表,負(fù)責(zé)人為空了# 所以根據(jù)需求需要對(duì)組件、版本號(hào)、負(fù)責(zé)人進(jìn)行不同處理# 這時(shí)在for循環(huán)中根據(jù)if判斷,寫(xiě)回調(diào)函數(shù)處理# 格式不一致數(shù)據(jù)的測(cè)試數(shù)據(jù)a = [[u'tool-1', u'1.9.13'], u'xiaowang', u'xiaoqu', [u'tool-2', u'1.9.23'], [u'tool-3', u'1.9.33'], [u'tool-4', u'1.9.43'], u'pi',[u'tool-5', u'1.9.53']]# a = [[u'tool-1', u'1.9.13'],u'xiaowang',[u'tool-2', u'1.9.23'],u'xiaowang', [u'tool-3', u'1.9.33'],u'xiaowang']# a = [[u'tool-1', u'1.9.13']]# [u'tool-1', u'1.9.13']your_pro = a[0]# print your_pro# [u'xiaowang', u'xiaoqu', [u'tool-2', u'1.9.23']]tmp = a[1:]# print tmpdef git_callback(whole_v, proj_value, name_value): # 如果存在負(fù)責(zé)人存在 try: if type(name_value[0]) is unicode: # 對(duì)除去列表0個(gè)索引的數(shù)據(jù)(依賴名和版本號(hào))后面的數(shù)據(jù)進(jìn)行遍歷 for i in name_value: # 碰到后面的數(shù)據(jù)是列表的進(jìn)行回調(diào) if type(i) is list: tmp_index = whole_v.index(i)+1 return git_callback(whole_v, whole_v[whole_v.index(i)], whole_v[tmp_index:]) else: # 打印依賴、版本號(hào) 負(fù)責(zé)人 開(kāi)始 print proj_value+i.split()+['start'] else: # 如果負(fù)責(zé)人后跟的組件這種格式的列表數(shù)據(jù)為空 # 也就是只有依賴和版本號(hào)列表數(shù)據(jù),負(fù)責(zé)人為空,就打印依賴版本號(hào) ver = proj_value owner = name_value if type(owner[0]) is unicode: return git_callback(whole_v, ver, owner) else: print ver # 這里是為了判斷是不是到列表的最后一位 # 如果是最后一個(gè)值,且不是字符串的Unicode,而是列表 # 就直接打印出項(xiàng)目 if whole_v.index(owner[0]) == len(whole_v)-1: # 打印最后一個(gè)值 print whole_v[-1:] else: # 這里比較繞,打印調(diào)試吧... new_ver = whole_v[whole_v.index(ver)+1] owner = whole_v[whole_v.index(ver)+2:] return git_callback(whole_v, new_ver, owner) except IndexError as e: print proj_value print egit_callback(a, your_pro, tmp)
demo的output:
Boom:git_response pirogue$ python test.py[u'tool-1', u'1.9.13', u'xiaowang', 'start'][u'tool-1', u'1.9.13', u'xiaoqu', 'start'][u'tool-2', u'1.9.23'][u'tool-3', u'1.9.33'][u'tool-4', u'1.9.43', u'pi', 'start'][u'tool-5', u'1.9.53']list index out of range
python的多線程
下面的代碼是從主程序中,摘取出來(lái)的代碼片段
from multiprocessing.dummy import Pool as ThreadPool# 判斷git查詢返回的依賴數(shù)據(jù)格式不唯一的回調(diào)def git_callback(whole_v, proj_value, name_value, git_cookie): # whole_v = whole_v list_git = [] if name_value: # print name_value for i in name_value: # print i if i: if type(i) is list: tmp_index = whole_v.index(i)+1 return git_callback(whole_v, whole_v[whole_v.index(i)], whole_v[tmp_index:], git_cookie) else: git_cookie = str(git_cookie.split()[0])+' '+str(git_cookie.split()[1]) list_git.append(tuple(git_cookie.split("?")+i.split())) print list_git pool = ThreadPool(100) result = pool.map(pool_git, list_git) print result pool.close() pool.join() else: print proj_value
新聞熱點(diǎn)
疑難解答
圖片精選