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实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
Django 视图层(view)的使用
Nov 09 Python
python矩阵的转置和逆转实例
Dec 12 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
Jan 15 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
对Python中画图时候的线类型详解
Jul 07 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Python pickle模块常用方法代码实例
Oct 10 Python
浅谈Python __init__.py的作用
Oct 28 Python
python pygame 愤怒的小鸟游戏示例代码
Feb 25 Python
python模板入门教程之flask Jinja
Apr 11 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
长波知识介绍
2021/03/01 无线电
PHP 变量的定义方法
2010/01/26 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
php实现微信支付之退款功能
2018/05/30 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
Jquery index()方法 获取相应元素索引值
2012/10/12 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
javascript监听页面刷新和页面关闭事件方法详解
2017/01/09 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
使用keras根据层名称来初始化网络
2020/05/21 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
外企求职信范文分享
2013/12/31 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
数控机床专业自荐信
2014/05/19 职场文书
党校党性分析材料
2014/12/19 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
改进工作作风心得体会
2016/01/23 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL