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 相关文章推荐
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
基于python list对象中嵌套元组使用sort时的排序方法
Apr 18 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
python实现自动登录
Sep 17 Python
python hook监听事件详解
Oct 25 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
Python 实现RSA加解密文本文件
Dec 30 Python
python通配符之glob模块的使用详解
Apr 24 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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如何调用webservice应用介绍
2012/11/24 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
javascript自执行函数之伪命名空间封装法
2010/12/25 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
Python中使用glob和rmtree删除目录子目录及所有文件的例子
2014/11/21 Python
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python 函数中的参数类型
2020/02/11 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
加拿大最大的书店:Indigo
2017/01/01 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
建龙钢铁面试总结
2014/04/15 面试题
大学生简单自荐信
2013/11/10 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
Python自动化爬取天眼查数据的实现
2021/06/15 Python
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android
PyTorch中的torch.cat简单介绍
2022/03/17 Python