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


Posted in Python onDecember 25, 2017

下面的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回调函数中使用多线程的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python实现k均值算法示例(k均值聚类算法)
Mar 16 Python
Python pickle模块用法实例
Apr 14 Python
轻松实现python搭建微信公众平台
Feb 16 Python
详解如何为eclipse安装合适版本的python插件pydev
Nov 04 Python
python turtle库画一个方格和圆实例
Jun 27 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
关于多元线性回归分析——Python&SPSS
Feb 24 Python
为什么相对PHP黑python的更少
Jun 21 Python
Python map及filter函数使用方法解析
Aug 06 Python
pycharm专业版远程登录服务器的详细教程
Sep 15 Python
Python通过字典映射函数实现switch
Nov 06 Python
Python类class参数self原理解析
Nov 19 Python
python创建列表和向列表添加元素的实现方法
Dec 25 #Python
Python中装饰器高级用法详解
Dec 25 #Python
Python中最大最小赋值小技巧(分享)
Dec 23 #Python
利用python实现简单的邮件发送客户端示例
Dec 23 #Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 #Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 #Python
windows 下python+numpy安装实用教程
Dec 23 #Python
You might like
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
vue2.0+webpack环境的构造过程
2016/11/08 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
利用Node.js了解与测量HTTP所花费的时间详解
2017/09/22 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
python numpy元素的区间查找方法
2018/11/14 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
Python3如何判断三角形的类型
2020/04/12 Python
python自定义函数def的应用详解
2020/06/03 Python
深入了解python列表(LIST)
2020/06/08 Python
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
财务人员求职自荐书范文
2014/02/10 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
旷课检讨书范文
2014/10/30 职场文书
初中差生评语
2014/12/29 职场文书
财务部会计岗位职责
2015/02/03 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书