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之eval()函数危险性浅析
Jul 03 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Python开发的实用计算器完整实例
May 10 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
Python引用计数操作示例
Aug 23 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
python多线程实现TCP服务端
Sep 03 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
python/golang 删除链表中的元素
Sep 14 Python
浅析python实现动态规划背包问题
Dec 31 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 IP及IP段进行访问限制的代码
2008/12/17 PHP
php获取参数的几种方法总结
2014/02/18 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
跟老齐学Python之编写类之三子类
2014/10/11 Python
python获取目录下所有文件的方法
2015/06/01 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Pytorch之contiguous的用法
2019/12/31 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
浙大网新C/C++面试解惑
2015/05/27 面试题
行政部经理助理岗位职责
2014/06/15 职场文书
党员自我对照检查材料
2014/08/19 职场文书
小学教师见习总结
2015/06/23 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
前端使用svg图片改色实现示例
2022/07/23 HTML / CSS