广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python并行执行for循环
  • 538
分享到

Python并行执行for循环

Python 2023-01-31 03:01:21 538人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

简介 在介绍如何最简单地利用 python 实现并行前,我们先来看一个简单的代码。 Words = ['apple', 'bananan', 'cake', 'dumpling'] for word in words:

简介
在介绍如何最简单地利用 python 实现并行前,我们先来看一个简单的代码。

   Words = ['apple', 'bananan', 'cake', 'dumpling']
   for word in words:
       print word

上面的例子中,我们用一个 for 循环打印出 words 列表中的每个单词。问题来了,这里我们打印完一个单词才能接着打印另一个单词,能不能同时打印呢?好比如在银行的营业厅排队,如果只开一个窗口办理业务,你需要等前面一个人办完,才轮到你,如果能开多个窗口,显然会快很多。

我们将上面的代码抽象成下面的模式:

items = list()
for item in items:
    process(item)

其中,items 是一个列表,process(arg) 是一个函数,可以有返回值也可以没有。我们希望可以将这种模式改成并行处理的方式,比如可以引入多线程等处理方式,但是这些处理方式往往会让代码变得更加复杂。那么有什么简单的处理方式吗?

并行化
我们将上面的串行模式进行简单地改造,使之可以并行处理:

from multiprocessing.dummy import Pool as ThreadPool
items = list()
pool = ThreadPool()
pool.map(process, items)
pool.close()
pool.join()

下面我们进行测试

# -*- coding: utf-8 -*-
import time
from multiprocessing.dummy import Pool as ThreadPool
def get_logger(name):
    logger = logging.getLogger(name)
    logger.setLevel(logging.DEBUG)
    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(logging.DEBUG)
    fORMatter = logging.Formatter(
        '%(asctime)s - %(name)s [%(levelname)s] %(message)s')
    stream_handler.setFormatter(formatter)
    logger.addHandler(stream_handler)
    return logger
def process(item):
    log = _get_logger(item)
    log.info("item: %s" % item)
    time.sleep(5)
items = ['apple', 'bananan', 'cake', 'dumpling']
pool = ThreadPool()
pool.map(process, items)
pool.close()
pool.join()

输出结果:

2016-06-07 11:23:57,530 - apple [INFO] word: apple
2016-06-07 11:23:57,530 - bananan [INFO] word: bananan
2016-06-07 11:23:57,530 - cake [INFO] word: cake
2016-06-07 11:23:57,531 - dumpling [INFO] word: dumpling

从上面显示的时间可以看到,我们已经由原来的串行打印变成并行打印了。

另外,上面的处理函数 process 是没有返回值的。假设 process 函数的返回值是 result,那么 results = pool.map(process, items) 的返回值是一个列表,每个元素对应着处理每个 item 的结果。

因此,

results = list()
for item in item_list:
    result = process(item)
    results.append(result)
return results

上面的串行处理可以改成下面的并行处理:

from multiprocessing.dummy import Pool as ThreadPool
pool = ThreadPool()
results = pool.map(process, item_list)
pool.close()
pool.join()

参考资料
Parallelism in one line
一行 Python 实现并行化


本文作者:FunHacks <最简单的 python 并行实现方式>
原文地址:Http://funhacks.net/2016/06/11/最简单的python并行实现方式/
文章均采用 Creative Commons BY-NC-ND 4.0(自由转载-保持署名-非商用-禁止演绎)协议发布.

--结束END--

本文标题: Python并行执行for循环

本文链接: https://www.lsjlt.com/news/187218.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python并行执行for循环
    简介 在介绍如何最简单地利用 python 实现并行前,我们先来看一个简单的代码。 words = ['apple', 'bananan', 'cake', 'dumpling'] for word in words:...
    99+
    2023-01-31
    Python
  • python中两个for循环嵌套怎么执行
    在Python中,可以通过两个for循环的嵌套来执行嵌套循环。嵌套循环的执行顺序是外部循环先进行一次,然后内部循环完成所有的迭代,然...
    99+
    2023-10-18
    python
  • c++ For循环执行顺序流程图解
    for 循环允许您编写一个执行特定次数的循环的重复控制结构。 语法 C++ 中 for 循环的语法: for ( init; condition; increment ) { ...
    99+
    2022-11-12
  • java for循环内执行多线程问题
    目录java用多线程来加快循环效率线程池搭配闭锁for循环中使用多线程总结java用多线程来加快循环效率 线程池搭配闭锁 涉及知识:Executors(线程池)、CountDownL...
    99+
    2023-03-10
    java for循环 java多线程 java for循环多线程
  • c# for循环中创建线程执行问题
    先执行以一个简单的示例: static void Main(string[] args) { List<int> taskConsumes =...
    99+
    2022-11-12
  • PHP中for循环的执行顺序是什么
    本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑for 循环是 PHP 中最复杂的循环结构。for 循环语句能够按照已知的循环次数进行循环操作,适用于明确知道执行次数的情况。for 循环的语法格式如下:for (初始...
    99+
    2016-02-26
    PHP for循环
  • java中for循环执行的顺序图文详析
    for循环基础 for循环是最灵活也是最常用的循环结构,表达式一般如下:   for(条件表达式1;条件表达式2;条件表达式3){     语句块;   } 接下来详细介绍J...
    99+
    2022-11-12
  • python for循环
    Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。for循环的语法格式如下:for iterating_var in sequence:    statem...
    99+
    2023-01-30
    python
  • 终端循环执行命令
    线上有一个接口,需要临时观察一下,http状态是否正常手动重复执行,太累了,可以用shell脚本来完成#!/bin/bash while true     do curl&nbs...
    99+
    2023-01-30
    终端 命令
  • python-for循环与while循环
    格式: while 条件 为 True: 代码块 while True: rayn_age = 18 age = input('请输入你的年龄:') age = int(age) if age == ra...
    99+
    2023-01-31
    python
  • Python循环语句(while循环、for循环)
    Python循环语句 一、while循环二、for语句三、range()函数四、break 和 continue 语句五、pass语句 Python循环语句主要有while循环和for循环...
    99+
    2023-09-04
    python 开发语言 爬虫
  • R语言中for循环的并行处理方式
    前言 本文用于记录笔者在将R语言中的for语句并行化处理中的一些问题。 实验 这里使用foreach和doParallel包提供的函数实现for语句的并行处理。 for语句脚本 ...
    99+
    2022-11-12
  • Linux命令行循环执行shell命令
    目录linux命令行,循环执行shell命令死循环命令格式效果普通计数循环循环10次效果LLinux命令行,循环执行shell命令 死循环 命令格式 while true ;do <command>; don...
    99+
    2023-01-03
    linuxshell循环执行命令 循环执行shell命令 linux命令行 Linuxshell循环命令 while死循环
  • java for循环内执行多线程问题怎么解决
    这篇文章主要介绍了java for循环内执行多线程问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java for循环内执行多线程问题怎么解决文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-05
  • python中For循环
    打印出1到100的数,不包含100for i in range(1,100):if i==23:print "great,you got your luncky number:",iprint 'The unmber is:',i=====...
    99+
    2023-01-31
    python
  • Python 循环 while,for
    一循环语句(有两种):while 语句for   语句while 语句:问题:输入一个整数n,让程序输出n行的:hello 1hello 2.......hell nwhile 语句:作用:根据一定条件,重复的执行一条语句或多条语句语法:w...
    99+
    2023-01-31
    Python
  • python两个循环怎么并列运行
    Rate limit reached for gpt-3.5-turbo in organization org-68Lqb4iD2...
    99+
    2023-10-18
    python
  • 使用Cython中prange函数实现for循环的并行
    目录楔子使用 prangeprange 的其它参数在reductions操作上使用prange并行编程的局限性小结楔子 上一篇文章我们探讨了 GIL 的原理,以及如何释放 GIL 实...
    99+
    2022-11-11
  • python如何将嵌套for循环写成单行
    这篇文章主要介绍python如何将嵌套for循环写成单行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!将嵌套 for 循环写成单行我们经常会如下这种嵌套的 for 循环代码list1 = rang...
    99+
    2023-06-27
  • Python双层for循环
    matrix0 = [[1, 2], [3, 3], [2, 1]] print 'matrix0:', matrix0 matrix1 = [[1 for i in range(2)] for i in range(3)] prin...
    99+
    2023-01-31
    Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作