对Python3之进程池与回调函数的实例详解

进程池

代码演示

方式一

from multiprocessing import Pool

def deal_task(n):
 n -= 1
 return n

if __name__ == '__main__':
 n = 10
 p = Pool(4)
 for i in range(4):
  res = p.apply(deal_task, args=(n,))
  #调用apply是一个串行的效果,任务会被进程一个一个的处理,直接得到结果
  #前提是执行的任务必须要有返回值
  print(res)

方式二

from multiprocessing import Pool

def deal_task(n):
 n -= 1
 return n

if __name__ == '__main__':
 n = 10
 p = Pool(4)
 obj_l = []
 for i in range(4):
  #调用apply_async会返回一个对象,主进程会不断扔任务给线程池,让子线程处理
  obj = p.apply_async(deal_task, args=(n,))
  obj_l.append(obj)
 #首先函数要有返回值
 #调用close目的是防止join期间会有别的任务被添加到任务列表中
 #不调用close会报错
 p.close()
 p.join()
 #join是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。
 for obj in obj_l:
  print(obj.get())

方式三

from multiprocessing import Pool

import requests

def get_page(url):
 ret = requests.get(url).text
 return {'url': url, 'ret': ret}

def parse_page(ret):
 with open('ab.txt', 'a') as f:
  f.write('%s - %s\n' % (ret['url'], len(ret['ret'])))

if __name__ == '__main__':
 urls = [
  'https://www.baidu.com',
  'http://www.openstack.org',
  'https://www.python.org',
  'https://help.github.com/',
  'http://www.sina.com.cn/'
 ]
 p = Pool()
 for url in urls:
  #使用回调函数,当get_page下载完后,主线程调用parse_page自动处理get_page下载的结果,节省了parse_page的时间,该场景用于一个函数为耗时操作并且产生数据,另一个函数是非耗时操作,这样就节省了非耗时操作函数的时间
  p.apply_async(get_page, args=(url,), callback=parse_page)

 p.close()
 p.join()
 print('主')

join是要让子进程全部处理完之后得到结果统一处理,还有一个非常重要的原因是进程池依附于主进程,主进程结束,进程池消失。进程池的任务没有被处理程序就结束了。

以上这篇对Python3之进程池与回调函数的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python3中条件控制、循环与函数的简易教程

    一.条件控制 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块,而计算机很多自动化任务,也是根据条件判断来实现的. 我们可以通过下图,来了解一下条件语句执行的过程 和 Java 差不多,不同点: 1.每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块: 2.使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块: 3.elif 代替了 else if: 4.在 Python 中没有 switch – case 语句. age =

  • Python3.x中自定义比较函数

    在Python3.x的世界里,cmp函数没有了.那么sorted,min,max等需要比较函数作为参数的函数该如何用呢? 以min函数的定义为例,有两种重载形式: 单参数(一个迭代器): 复制代码 代码如下: min(iterable[, key=func]) -> value 多参数(多个待比较内容): 复制代码 代码如下: min(a, b, c, ...[, key=func]) -> value 本文主要讨论key=func参数的使用 .举例说明吧: 1.自定义对象的比较 我定义了一个

  • Python3.2中的字符串函数学习总结

    Sequence Types sequence类型有六种:strings, byte sequences (bytes objects), byte arrays(bytearray objects), list, tuple, range objects. sequence类型都支持的通用操作: 成员检查:in.not in 连接:+ 复制:* 下标取值:s[i] 切片:s[i : j] 长度检查:len(s) 最小值:min(s) 最大值:max(s) 索引取值:s.index(i) 字符串

  • 浅谈python函数之作用域(python3.5)

    1 基本概念 1.1 命名空间 (namespace) 命名空间是变量名到对象的映射(name -> obj).目前大多数的命名空间以类似于python字典的形式实现,实现形式在未来可能发生变化.命名空间举例:内置变量(内置函数abs, 内置的异常等),模块中的全局变量,函数调用时的局部变量.在某种意义上讲,对象的属性也形成一个命名空间.重要的是,不同的命名空间中的变量没有任何关联,两个不同的命名空间中可以包含相同的变量名. 命名空间有不同的创建时间和生命周期: •内置变量命名空间在python

  • Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】

    本文实例讲述了Python3.5函数的定义与使用.分享给大家供大家参考,具体如下: 1.函数学习框架 2.函数的定义与格式 (1)定义 (2)函数调用 注:函数名称不能以数字开头,建议函数名称的开头用小写的字母 (3)函数有四种格式,分别是:无参数无返回值,有参数无返回值.无参数有返回值.有参数有返回值 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu # 无参数无返回值 def hello(): # 函数体/

  • python3中函数参数的四种简单用法

    下面给大家介绍python3中函数参数的四种简单用法,具体内容如下所示: def print_two(*args): arg1, arg2 = args print "arg1: %r, arg2: %r" % (arg1,arg2) def print_two_again(arg1, arg2): print "arg1: %r, arg2: %r" % (arg1, arg2) def print_one(arg1): print "arg1: %r&

  • 深入理解Python3 内置函数大全

    本文主要介绍了Python3 内置函数,分享给大家,具体如下: 内置函数 以下代码以Python3.6.1为例 #coding=utf-8 # builtin_function.py 内置函数 import os def fun(): all([True, False]) # 迭代器(为空or)所有元素为true,返回true => False any([True, False]) # 迭代器任意一个元素为true,返回true => True num = abs(-1.23) # 绝对值 n

  • Python3.2中Print函数用法实例详解

    本文实例讲述了Python3.2中Print函数用法.分享给大家供大家参考.具体分析如下: 1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 支持参数格式化,与C语言的printf类似 >>> strHello = "the length of (%s) is %d" %('Hello World',len('Hello

  • Python3中lambda表达式与函数式编程讲解

    简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.其一般有如下几种使用方式: 1.lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式.lambda是一个表达式而不是一个语句.它能够出现在Python语法不允许def出现的地方.作为表达式,lambda返回一个值(即一个新的函数).lambda用来编写简单的函数,而def用来处理更强大的任务.例如: f = lambda x,y

  • Python3.6.x中内置函数总结及讲解

    Python3.6.x中内置函数总结 # -*- coding:utf-8 -*- """ abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool()

  • Python3匿名函数用法示例

    本文实例讲述了Python3匿名函数用法.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 # 匿名函数 # 1.不用给函数取名 # 2.使用方便,随时定义,随时使用 def calc_x(x): return x*x rs = calc_x(10) print (rs) # lambda 参数列表:函数执行的简单逻辑代码 # lambda 返回一个函数对象,可以使用变量接收 a=lambda x:x*x # 调用匿名函数 # 接收函数对象的变量

随机推荐