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中mechanize库的简单使用示例
Jan 10 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
Python实现判断并移除列表指定位置元素的方法
Apr 13 Python
浅谈Pandas 排序之后索引的问题
Jun 07 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
Jul 10 Python
python实现flappy bird游戏
Dec 24 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
关于Pytorch的MLP模块实现方式
Jan 07 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 Python
Python下opencv库的安装过程及问题汇总
Jun 11 Python
Python日志模块logging用法
Jun 05 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
Terran历史背景
2020/03/14 星际争霸
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
php生成扇形比例图实例
2013/11/06 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
javascript 对象比较实现代码
2009/04/27 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
Python中operator模块的操作符使用示例总结
2016/06/28 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
python实现简单图书管理系统
2019/11/22 Python
python 字典套字典或列表的示例
2019/12/16 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
python如何求100以内的素数
2020/05/27 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
委托书怎么写
2014/07/31 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
建国大业观后感600字
2015/06/01 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
Nginx速查手册及常见问题
2022/04/07 Servers
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android