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 collections模块实例讲解
Apr 07 Python
Python迭代和迭代器详解
Nov 10 Python
django表单实现下拉框的示例讲解
May 29 Python
Python lambda表达式用法实例分析
Dec 25 Python
Python中logging实例讲解
Jan 17 Python
python2和python3在处理字符串上的区别详解
May 29 Python
Python跳出多重循环的方法示例
Jul 03 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
pytorch 自定义参数不更新方式
Jan 06 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
详解Python中namedtuple的使用
Apr 27 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 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 采集程序原理分析篇
2010/03/05 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php保存二进制原始数据为图片的程序代码
2014/10/14 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
javascript globalStorage类代码
2009/06/04 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
webpack4 处理SCSS的方法示例
2018/09/03 Javascript
vue webpack重写cookie路径的方法
2019/07/10 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
python测试驱动开发实例
2014/10/08 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
Django实现组合搜索的方法示例
2018/01/23 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
Python标准库itertools的使用方法
2020/01/17 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
python如何实现图片压缩
2020/09/11 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
自我推荐书
2013/12/04 职场文书
房地产促销活动方案
2014/03/01 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
大学毕业生个人总结
2015/02/28 职场文书
幼儿园六一儿童节开幕词
2016/03/04 职场文书
Python之基础函数案例详解
2021/08/30 Python
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
java中如何截取字符串最后一位
2022/07/07 Java/Android