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中的引用和拷贝浅析
Nov 22 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
python判断windows系统是32位还是64位的方法
May 11 Python
使用实现pandas读取csv文件指定的前几行
Apr 20 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
python中pip的安装与使用教程
Aug 10 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
Apr 29 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
Python collections.deque双边队列原理详解
Oct 05 Python
浅析Python requests 模块
Oct 09 Python
Python 图片处理库exifread详解
Feb 25 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 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 读取文件的正确方法
2009/04/29 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
Add Formatted Text to a Word Document
2007/06/15 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
2017/01/03 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
Layer弹出层动态获取数据的方法
2018/08/20 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python实现每次处理一个字符的三种方法
2014/10/09 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python语言检测模块langid和langdetect的使用实例
2019/02/19 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
keras输出预测值和真实值方式
2020/06/27 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
汽车专业毕业生推荐信
2013/11/12 职场文书
书香校园建设方案
2014/05/02 职场文书
文明旅游倡议书
2015/04/28 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
灵能百分百第三季什么时候来?
2022/03/15 日漫
python神经网络 使用Keras构建RNN训练
2022/05/04 Python