English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
下面的demo是根据需求写的简单测试脚本
#!/usr/bin/env python # coding: utf-8 # 第一个列表为依赖组件和版本号,后面紧跟负责人名称 # 接着出现第二个以来组建列表,负责人为空了 # 所以根据需求需要对组件、版本号、负责人进行不同处理 # 这时在for循环中根据if判断,写回调函数处理 # 格式不一致数据的测试数据 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 tmp def git_callback(whole_v, proj_value, name_value): # 如果存在负责人存在 try: if type(name_value[0]) is unicode: # 对除去列表0个索引的数据(依赖名和版本号)后面的数据进行遍历 for i in name_value: # 碰到后面的数据是列表的进行回调 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: # 打印依赖、版本号 负责人 开始 print proj_value+i.split()+['start'] else: # 如果负责人后跟的组件这种格式的列表数据为空 # 也就是只有依赖和版本号列表数据,负责人为空,就打印依赖版本号 ver = proj_value owner = name_value if type(owner[0]) is unicode: return git_callback(whole_v, ver, owner) else: print ver # 这里是为了判断是不是到列表的最后一位 # 如果是最后一个值,且不是字符串的Unicode,而是列表 # 就直接打印出项目 if whole_v.index(owner[0]) == len(whole_v)-1: # 打印最后一个值 print whole_v[-1:] else: # 这里比较绕,打印调试吧... 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 e git_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的多线程
El siguiente código es un fragmento de código extraído del programa principal.
from multiprocessing.dummy import Pool as ThreadPool # Determinar el formato único de los datos de respuesta de la consulta git de retroalimentación 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
El fragmento de código de multihilo superior es una función de retroalimentación, no se ha modificado completamente según el demo. No es difícil modificarlo según las necesidades, simplemente hay que hacer más depuración.
Recibir múltiples parámetros en el multihilo de Python
from multiprocessing.dummy import Pool as ThreadPool pool = ThreadPool(100) result = pool.map(pool_git, list_git) print result pool.close() pool.join()
pool_git es la función de llamada de múltiples hilos que necesitas, y list_git es el parámetro que necesita recibir pool_git. Por defecto, pool_git es una función que recibe un solo parámetro.
Pero a menudo diseñamos funciones con lógicas complejas, que necesitan que se ingresen múltiples parámetros en pool_git. En este caso, list_git debe proporcionar una lista compuesta de múltiples tuplas.
En el ejemplo de código proporcionado por extranjeros en Stack Overflow:
def multi_run_wrapper(args): return add(*args) def add(x,y): return x+y if __name__ == "__main__": from multiprocessing import Pool pool = Pool(4) resultados = pool.map(multi_run_wrapper,[(1,2)),(2,3)),(3,4)]) imprimir resultados salida [3, 5, 7]
Hay más preguntas y respuestas en Stack Overflow que te ayudarán a entender mejor:
Confío en que el inteligente te一定能 entender
Múltiples hilos y múltiples procesos
from multiprocessing.dummy import Pool as ThreadPool
Múltiples hilos de proceso, vinculado a un núcleo de CPU
from multiprocessing import Pool
Múltiples procesos, ejecutándose en múltiples núcleos de CPU
Si no entiendes si una tarea es intensiva en CPU o en IO, entonces usa esta biblioteca y escribe dos importaciones, luego instanciálalas y ejecútalas para ver cuánto tiempo toma, en términos de uso, solo cambia algunas letras al crear el objeto. Intercambio entre Pool y ThreadPool.
Resumen
Resumen: Si no entiendes si una tarea es intensiva en CPU o en IO, entonces usa esta biblioteca y escribe dos importaciones, luego instanciálalas y ejecútalas para ver cuánto tiempo toma, en términos de uso, solo cambia algunas letras al crear el objeto. Intercambio entre Pool y ThreadPool.
Declaración: El contenido de este artículo se obtiene de la red, el derecho de autor pertenece al propietario original, el contenido se contribuye y sube por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha procesado editorialmente y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando evidencia relevante, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.3Declaración: El contenido de este artículo se obtiene de la red, el derecho de autor pertenece al propietario original, el contenido se contribuye y sube por los usuarios de Internet, este sitio web no posee los derechos de propiedad, no se ha procesado editorialmente y no asume responsabilidades legales relacionadas. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#w proporcionando evidencia relevante, una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.