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使用新浪微博api上传图片到微博示例
Jan 10 Python
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
Jul 18 Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
解决vscode python print 输出窗口中文乱码的问题
Dec 03 Python
Python实现的各种常见分布算法示例
Dec 13 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
Django项目中使用JWT的实现代码
Nov 04 Python
python实现身份证实名认证的方法实例
Nov 08 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
Jquery日期选择datepicker插件用法实例分析
2015/06/08 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
理解javascript闭包
2015/12/15 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
javascript实现dom元素可拖动
2016/03/21 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
Bootstrap表单布局
2016/07/19 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
jQuery-App输入框实现实时搜索
2020/11/19 jQuery
js实现扫雷源代码
2020/11/27 Javascript
python实现xlsx文件分析详解
2018/01/02 Python
浅谈python日志的配置文件路径问题
2018/04/28 Python
django celery redis使用具体实践
2019/04/08 Python
python处理excel绘制雷达图
2019/10/18 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
专升本个人自我评价
2013/12/22 职场文书
社区母亲节活动方案
2014/03/05 职场文书
小学教师师德师风个人整改措施
2014/09/18 职场文书
高三毕业评语
2014/12/31 职场文书
网络管理员岗位职责
2015/02/12 职场文书
产品调价通知函
2015/04/20 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python