下面的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的多线程
下面的代码是从主程序中,摘取出来的代码片段
from multiprocessing.dummy import Pool as ThreadPool # 判断git查询返回的依赖数据格式不唯一的回调 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
上面的多线程代码片段是一个回调函数,没有完全根据demo进行改装,有了demo根据需求改起来也不难,多调试就可以了。
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是你需要多线程调用的功能函数,list_git是pool_git函数需要接收的参数,默认情况下pool_git是一个接收一个参数的函数。
但是我们的功能常常设计的逻辑比较复杂,需要在pool_git中传入多个参数,这时list_git就应该给一个多个元组组成的列表。
stackoverflow上老外给的代码示例:
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) results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)]) print results output [3, 5, 7]
Stack Overflow上更多的答疑方便你更好的理解:
https://stackoverflow.com/questions/5442910/python-multiprocessing-pool-map-for-multiple-arguments
相信聪明的你一定能看得懂~
多线程与多进程
from multiprocessing.dummy import Pool as ThreadPool
多线程进程池,绑定一个CPU核心
from multiprocessing import Pool
多进程,运行于多个cpu核心
如果你搞不懂是CPU密集型的任务,还是IO密集型的任务,那就用这个库两条import都写上,然后分别实例化跑一下就知道耗时长短,用法上只是在创建对象上改几个字母就行Pool和ThreadPool的互换。
总结
以上所述是小编给大家介绍的python回调函数中使用多线程的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]