当前位置: 首页 > news >正文

python进程池multiprocessing.Pool和线程池multiprocessing.dummy.Pool实例

进程池:

进程池的使用有四种方式:apply_async、apply、map_async、map。其中apply_async和map_async是异步的,也就是启动进程函数之后会继续执行后续的代码不用等待进程函数返回。apply_async和map_async方式提供了一写获取进程函数状态的函数: ready()successful()get()。
PS: join()语句要放在 close()语句后面。
 
实例代码如下:
# -*- coding: utf-8 -*-

import multiprocessing
import time


def func(msg):
    print('msg: ', msg)
    time.sleep(1)
    print('********')
    return 'func_return: %s' % msg

if __name__ == '__main__':
    # apply_async
    print('\n--------apply_async------------')
    pool = multiprocessing.Pool(processes=4)
    results = []
    for i in range(10):
        msg = 'hello world %d' % i
        result = pool.apply_async(func, (msg, ))
        results.append(result)
    print('apply_async: 不堵塞')

    for i in results:
        i.wait()  # 等待进程函数执行完毕

    for i in results:
        if i.ready():  # 进程函数是否已经启动了
            if i.successful():  # 进程函数是否执行成功
                print(i.get())  # 进程函数返回值

    # apply
    print('\n--------apply------------')
    pool = multiprocessing.Pool(processes=4)
    results = []
    for i in range(10):
        msg = 'hello world %d' % i
        result = pool.apply(func, (msg,))
        results.append(result)
    print('apply: 堵塞')  # 执行完func才执行该句
    pool.close()
    pool.join()  # join语句要放在close之后
    print(results)

    # map
    print('\n--------map------------')
    args = [1, 2, 4, 5, 7, 8]
    pool = multiprocessing.Pool(processes=5)
    return_data = pool.map(func, args)
    print('堵塞')  # 执行完func才执行该句
    pool.close()
    pool.join()  # join语句要放在close之后
    print(return_data)

    # map_async
    print('\n--------map_async------------')
    pool = multiprocessing.Pool(processes=5)
    result = pool.map_async(func, args)
    print('ready: ', result.ready())
    print('不堵塞')
    result.wait()  # 等待所有进程函数执行完毕

    if result.ready():  # 进程函数是否已经启动了
        if result.successful():  # 进程函数是否执行成功
            print(result.get())  # 进程函数返回值

  

线程池:

线程池的使用方式和进程池类似。
 
实例代码如下:
# -*- coding: utf-8 -*-

from multiprocessing.dummy import Pool as ThreadPool
import time


def fun(msg):
    print('msg: ', msg)
    time.sleep(1)
    print('********')
    return 'fun_return %s' % msg


# map_async
print('\n------map_async-------')
arg = [1, 2, 10, 11, 18]
async_pool = ThreadPool(processes=4)
result = async_pool.map_async(fun, arg)
print(result.ready())  # 线程函数是否已经启动了
print('map_async: 不堵塞')
result.wait()  # 等待所有线程函数执行完毕
print('after wait')
if result.ready():  # 线程函数是否已经启动了
    if result.successful():  # 线程函数是否执行成功
        print(result.get())  # 线程函数返回值

# map
print('\n------map-------')
arg = [3, 5, 11, 19, 12]
pool = ThreadPool(processes=3)
return_list = pool.map(fun, arg)
print('map: 堵塞')
pool.close()
pool.join()
print(return_list)

# apply_async
print('\n------apply_async-------')
async_pool = ThreadPool(processes=4)
results =[]
for i in range(5):
    msg = 'msg: %d' % i
    result = async_pool.apply_async(fun, (msg, ))
    results.append(result)

print('apply_async: 不堵塞')
# async_pool.close()
# async_pool.join()
for i in results:
    i.wait()  # 等待线程函数执行完毕

for i in results:
    if i.ready():  # 线程函数是否已经启动了
        if i.successful():  # 线程函数是否执行成功
            print(i.get())  # 线程函数返回值

# apply
print('\n------apply-------')
pool = ThreadPool(processes=4)
results =[]
for i in range(5):
    msg = 'msg: %d' % i
    result = pool.apply(fun, (msg, ))
    results.append(result)

print('apply: 堵塞')
print(results)

  

计算多的用多进程

io多的用多线程

转载于:https://www.cnblogs.com/dylan9/p/9207366.html

相关文章:

  • CF 612C. Replace To Make Regular Bracket Sequence【括号匹配】
  • 编程遇到英语必备
  • vuex的安装和入门demo
  • jQuery缩小放大触发事件
  • js进阶 11-13 jquery如何包裹元素和去除元素外的包裹
  • Linux 守护进程
  • 甲骨文解散Java Mission Control团队事件新进展
  • 内部类访问局部变量为什么要用final修饰
  • Java高级编程——选redis还是memcache,源码怎么说?
  • Python学习——文件操作和异常处理
  • radhat6.6上安装oracle12c RAC (三)
  • 复制cp 近半年【181天:2018-01-01至20180627 这段时间】图片到upoad目录下
  • javascript 中数组的创建 添加 与将数组转换成字符串 页面三种提交请求的方式...
  • Spark MLlib系列(二):基于协同过滤的电影推荐系统
  • spark-submit提交Spark Streamming+Kafka程序
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • angular学习第一篇-----环境搭建
  • Apache Spark Streaming 使用实例
  • js
  • Median of Two Sorted Arrays
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Swift 中的尾递归和蹦床
  • vue数据传递--我有特殊的实现技巧
  • 多线程事务回滚
  • 两列自适应布局方案整理
  • 浏览器缓存机制分析
  • 如何利用MongoDB打造TOP榜小程序
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 学习ES6 变量的解构赋值
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 主流的CSS水平和垂直居中技术大全
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 我们雇佣了一只大猴子...
  • (JS基础)String 类型
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (四)汇编语言——简单程序
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .aanva
  • .project文件
  • @SpringBootApplication 包含的三个注解及其含义
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [Android]通过PhoneLookup读取所有电话号码
  • [dfs] 图案计数
  • [hive] sql中distinct的用法和注意事项
  • [IM] [Webhook] Webhook实现IM平台机器人
  • [leetcode] 四数之和 M
  • [linux]centos7下解决yum install mysql-server没有可用包
  • [Lua实战]整理Lua中忽略的问题
  • [na]wireshark抓包排错-tcp.flags.reset
  • [POJ2446] Chessboard(二分图最大匹配-匈牙利算法)