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 (1)
Oct 31 Python
python的mysqldb安装步骤详解
Aug 14 Python
python实现学生信息管理系统
Apr 05 Python
Python中的list与tuple集合区别解析
Oct 12 Python
使用python 对验证码图片进行降噪处理
Dec 18 Python
Python字符串的修改方法实例
Dec 19 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
python如何为list实现find方法
May 30 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语法(3)
2006/10/09 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
destoon常用的安全设置概述
2014/06/21 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
JavaScript中两个字符串的匹配
2016/06/08 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
对pandas中apply函数的用法详解
2018/04/10 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Django单元测试工具test client使用详解
2019/08/02 Python
django框架两个使用模板实例
2019/12/11 Python
Django app配置多个数据库代码实例
2019/12/17 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
Python数据正态性检验实现过程
2020/04/18 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
python中二分查找法的实现方法
2020/12/06 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
Trunki英国官网:儿童坐骑式行李箱
2017/05/30 全球购物
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
信息管理专业学生自荐信格式
2013/09/22 职场文书
家具促销活动方案
2014/02/16 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
农村党建工作汇报材料
2014/10/27 职场文书
成绩报告单家长评语
2014/12/30 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python