python线程池回调函数_python回调函数中使用多线程的方法

下面的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'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'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','start']

[u'tool-1','start']

[u'tool-2',u'1.9.23']

[u'tool-3',u'1.9.33']

[u'tool-4',u'1.9.43','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,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[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上更多的答疑方便你更好的理解:

相信聪明的你一定能看得懂~

多线程与多进程

from multiprocessing.dummy import Pool as ThreadPool

多线程进程池,绑定一个CPU核心

from multiprocessing import Pool

多进程,运行于多个cpu核心

如果你搞不懂是CPU密集型的任务,还是IO密集型的任务,那就用这个库两条import都写上,然后分别实例化跑一下就知道耗时长短,用法上只是在创建对象上改几个字母就行Pool和ThreadPool的互换。

总结

以上所述是小编给大家介绍的python回调函数中使用多线程的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值