Python中运行并行任务技巧


Posted in Python onFebruary 26, 2015

示例

标准线程多进程,生产者/消费者示例:
Worker越多,问题越大

# -*- coding: utf8 -*-
import os

import time

import Queue

import threading

from PIL import Image
def create_thumbnail(filename, size=(128, 128)):

    try:

        fp, fmt = filename.rsplit('.', 1)

        im = Image.open(filename)

        im.thumbnail(size, Image.ANTIALIAS)

        im.save((fp + '_'+'x'.join(str(i) for i in size) + '.'+fmt), im.format)

        return '%s thumbnail success!' % filename

    except Exception:

        return '%s thumbnail failed!' % filename


def get_image_paths(folder):

    return [os.path.join(folder, f) for f in os.listdir(folder) if 'png' in f]


class Consumer(threading.Thread):

    def __init__(self, queue):

        threading.Thread.__init__(self)

        self._queue = queue
    def run(self):

        while True:

            content = self._queue.get()

            if isinstance(content, str) and content == 'quit':

                break

            respone = create_thumbnail(content)

        print 'Bye bye!'


def Producer():

    filenames = get_image_paths('images')

    queue = Queue.Queue()

    worker_threads = build_worker_pool(queue, 4)

    start_time = time.time()
    for filename in filenames:

        queue.put(filename)

    for worker in worker_threads:

        queue.put('quit')

    for worker in worker_threads:

        worker.join()
    print time.time() - start_time


def build_worker_pool(queue, size):

    workers = []

    for _ in range(size):

        worker = Consumer(queue)

        worker.start()

        workers.append(worker)

    return workers


if __name__ == '__main__':

    Producer()

map

Map能够处理集合按顺序遍历,最终将调用产生的结果保存在一个简单的集合当中。

Python中运行并行任务技巧

# -*- coding: utf8 -*-
import os

import time

from multiprocessing import Pool

from PIL import Image
def create_thumbnail(filename, size=(128, 128)):

    try:

        fp, fmt = filename.rsplit('.', 1)

        im = Image.open(filename)

        im.thumbnail(size, Image.ANTIALIAS)

        im.save((fp + '_'+'x'.join(str(i) for i in size) + '.'+fmt), im.format)

        return '%s thumbnail success!' % filename

    except Exception:

        return '%s thumbnail failed!' % filename


def get_image_paths(folder):

    return [os.path.join(folder, f) for f in os.listdir(folder) if 'png' in f]


def main():

    filenames = get_image_paths('images')

    start_time = time.time()

    

    pool = Pool(4)

    pool.map(create_thumbnail, filenames)

    pool.close()

    pool.join()
    print time.time() - start_time


if __name__ == '__main__':

    main()
Python 相关文章推荐
python中string模块各属性以及函数的用法介绍
May 30 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Python smtplib实现发送邮件功能
May 22 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
Python Sympy计算梯度、散度和旋度的实例
Dec 06 Python
使用pyqt5 tablewidget 单元格设置正则表达式
Dec 13 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 #Python
Python THREADING模块中的JOIN()方法深入理解
Feb 18 #Python
python持久性管理pickle模块详细介绍
Feb 18 #Python
Python中暂存上传图片的方法
Feb 18 #Python
Python中AND、OR的一个使用小技巧
Feb 18 #Python
Python编写屏幕截图程序方法
Feb 18 #Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 #Python
You might like
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
php 判断数组是几维数组
2013/03/20 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
php实现简单的MVC框架实例
2015/09/23 PHP
php实现Session存储到Redis
2015/11/11 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
js比较和逻辑运算符的介绍
2013/03/10 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
[36:33]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第二场
2018/04/04 DOTA
详细探究Python中的字典容器
2015/04/14 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
python实现KNN分类算法
2019/10/16 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
师范毕业生个人求职信
2013/12/09 职场文书
保护环境倡议书100字
2014/05/19 职场文书
中秋节活动总结
2014/08/29 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python