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 相关文章推荐
简单的编程0基础下Python入门指引
Apr 01 Python
浅谈Python peewee 使用经验
Oct 20 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
python 字段拆分详解
Dec 17 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
numpy矩阵数值太多不能全部显示的解决
May 14 Python
python 数据分析实现长宽格式的转换
May 18 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
keras分类之二分类实例(Cat and dog)
Jul 09 Python
用python实现一个简单的验证码
Dec 09 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 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
火车头采集器3.0采集图文教程
2007/03/17 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
AngularJS过滤器filter用法总结
2016/12/13 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
原生js封装的ajax方法示例
2018/08/02 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
python解析xml文件操作实例
2014/10/05 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
django删除表重建的实现方法
2019/08/28 Python
Python yield的用法实例分析
2020/03/06 Python
Python优秀开源项目Rich源码解析的流程分析
2020/07/06 Python
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
优秀的计算机专业求职信范文
2013/12/27 职场文书
小学数学教学反思
2014/02/02 职场文书
触摸春天教学反思
2014/02/03 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
2014年销售部工作总结
2014/12/01 职场文书
2014年技术部工作总结
2014/12/12 职场文书
先进典型发言材料
2014/12/30 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
房租涨价通知
2015/04/23 职场文书
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
openstack云计算keystone组件工作介绍
2022/04/20 Servers