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使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python使用Flask框架同时上传多个文件的方法
Mar 21 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
Jul 01 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
Tensorflow 多线程与多进程数据加载实例
Feb 05 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Python Flask实现进度条
May 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
PHPlet在Windows下的安装
2006/10/09 PHP
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
AngularJS基础 ng-model-options 指令简单示例
2016/08/02 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
浅谈Angularjs中不同类型的双向数据绑定
2018/07/16 Javascript
vue升级之路之vue-router的使用教程
2018/08/14 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
2018/12/11 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
python二叉树遍历的实现方法
2013/11/21 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python用户管理系统的实例讲解
2017/12/23 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
Django CBV类的用法详解
2019/07/26 Python
详解python中的index函数用法
2019/08/06 Python
python与js主要区别点总结
2020/09/13 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
python调用win32接口进行截图的示例
2020/11/11 Python
英国网上花店:Bunches
2016/11/29 全球购物
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
教师演讲稿范文
2014/01/08 职场文书
三年级学生评语
2014/04/23 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
三好学生竞选稿
2015/11/21 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书