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 tempfile模块学习笔记(临时文件)
May 25 Python
python脚本实现统计日志文件中的ip访问次数代码分享
Aug 06 Python
python获取远程图片大小和尺寸的方法
Mar 26 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
python生成excel的实例代码
Nov 08 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
Python实现字符串匹配的KMP算法
Apr 04 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
如何基于Django实现上下文章跳转
Sep 16 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
PHP操作数组相关函数
2011/02/03 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
php中this关键字用法分析
2016/12/07 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
循环 vs 递归浅谈
2013/02/28 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
详解封装基础的angular4的request请求方法
2018/06/05 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
python学生管理系统的实现
2020/04/05 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
物流专业大学生求职信范文
2013/10/28 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
前台文员职责范本
2014/03/07 职场文书
2015年新教师工作总结
2015/04/28 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技