python并行for循環_Python并行執行for循環

簡介

在介紹如何最簡單地利用 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()

本文作者:FunHacks

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276348.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276348.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276348.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言之指針與數組總結

和指針相關的問題口訣1: 1. 地址變量得地址,得誰地址指向誰 和指針相關的問題要畫圖: 內容變量畫房子,指針畫箭頭 ---->口 ---------------------------------------------------- 和指針相關的兩個特殊運算符: 一、"&…

2020年大前端技術趨勢解讀

導Lead語如今的前端早已不再拘泥于滿足頁面展示,而是開始延展到通過全棧來閉環產品。這表明前端已經有能力透過業務深入產業,繼而影響商業結果。這種表象的改變背后是本質的轉變,從更為宏觀的角度來說,前端正在通過持續的技術革新…

HTML默認樣式表CSS屬性

轉載鏈接:http://www.xiao-a.com/index.php/archives/440.html 開始的時候 *{margin:0;padding:0;},當需要使用邊距的時候,就需要還原HTML默認CSS值了。以前一直在找這份 文檔,今天偶然在w3上看到了。除了inline和block的定義&…

第六集 MSF構思階段項目團隊的組建

第六集 MSF構思階段項目團隊的組建__Note轉載于:https://www.cnblogs.com/zencorn/archive/2009/10/18/1585495.html

lc濾波器是利用電感的感抗_你對LC諧振電路你都了解嗎

根據在電路中電感器L和電容C的連接方式不同,可以有兩種LC諧振電路,LC并聯諧振電路和LC串聯諧振電路。LC并聯、串聯諧振電路在應用中的變化較多,是電路中分析的一個難點,只有掌握LC并聯、串聯電路的阻抗特性等基本概念,…

給小程序再減重 30% 的秘密?(京喜小程序首頁瘦身實踐)

前言—在 web 開發場景,減少代碼體積雖然是性能優化的一個方向,還沒到錙銖必較的程度。但是在小程序場景,由于代碼包上傳階段限制了主包 2M 和總包 16M(近期微信官方正在內測將總包上限調整至 20M )的尺寸,…

rfc mail content-type

轉載鏈接:http://www.w3.org/Protocols/rfc1341/0_TableOfContents.html RFC 郵件正文類型列表: Note: this is a hypertext versionof RFC1341 which has been obsoletedby RFC1521, of which no hypertextversion currently exists. Text …

Coolite Toolkit入門指南

Coolite Toolkit 簡介 Coolite Toolkit 是一個支持ASP.NET AJAX的Web控件Coolite Toolkit是基于跨瀏覽器的ExtJS 庫開發而來的,并且簡化了開發步驟,包含有豐富的Ajax運用Coolite Toolkit和ExtJS 都是開源的可能通過SVN直接獲取Coolite 的代碼簡單的說,就…

本周ASP.NET英文技術文章推薦[10/21 – 10/27]

這一篇是《本周ASP.NET英文技術文章推薦》系列的第一篇,在這個系列中,我將介紹5-10篇比較有價值的、本周發布的、與ASP.NET相關的英文技術文章,幫助各位朋友從良莠不齊的大量文章中挑出一些我認為非常有價值閱讀的,在進行一段簡要…

vim 離線安裝_VIM學習筆記 插件列表(Plugin)

由于zhihu的垃圾編輯器不支持表格,請查看以下完整格式:http://yyq123.github.io/learn-vim/learn-vim-plugin.html說明:本列表完全基于作者的主觀體驗,既不客觀也不完整;建議使用vim-plug或Vundle等插件管理器&#xf…

3 年前端面經和他在創業公司的成長歷程

在掘金上當了幾年的伸手黨,最近也準備輸出一些自己的東西。關于我首先介紹一下我自己,17 年畢業于一所 211 學校,但是由于大學四年馳騁在召喚師峽谷,畢業時也沒有找到一份大廠的工作,隨便找了一家創業公司簽了三方就去…

Spring.NET學習筆記9——打造簡易的依賴注入框架(練習篇) Level 100

我們在第三篇中學習里一個簡易的IoC框架。今天我們接著上次的程序,實現帶參數構造函數對象的實例和屬性的注入 。  我們知道可以通過反射獲取類的構造函數及參數(GetConstructors方法);可以獲取屬性和屬性的類型(GetProperties方法)。通過Activator的C…

PHP 利用Mail_MimeDecode類提取郵件正文

參考鏈接:http://blog.csdn.net/dmtnewtons_blog/article/details/18765289 rfc mail content-type: 參考鏈接:http://blog.csdn.net/dmtnewtons_blog/article/details/19327105 根據主流的郵件解析類Mail_MimeDecode,提取郵件正…

android 單元測試

首先AndroidManifest.xml View Code <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"com.travelsky.test" android:versionCode"1"androi…

申萬一級行業日指數_基金收評 | 指數震蕩走弱,軍工股成兩市主線!后期行情如何?...

收評君復盤日記(2020年9月21日)三大指數集體收跌&#xff0c;北向資金全天大幅凈流出近65億元&#xff0c;軍工板塊表現強勢。盤面回顧9月21日&#xff0c;兩市全天高開低走&#xff0c;早盤指數弱勢震蕩&#xff0c;三大指數盤中一度翻紅&#xff0c;但隨后震蕩走弱&#xff0…

若川的2016年度總結,畢業工作

可以點擊上方的標簽若川的故事、年度總結&#xff0c;查看往期文章有讀者反饋說看我年度總結系列比我源碼系列更有啟發。所以打算把2016-2018的年度總結發布到公眾號聲明原創&#xff0c;希望對大家有所啟發。&#xff08;雖然我的每一年都過得非常普通...&#xff09;以下是正…

jQuery之Ajax

轉載鏈接&#xff1a;http://cargoj.iteye.com/blog/1008047 1 . jQuery幫助之Ajax請求&#xff08;一&#xff09;jQuery.ajax(options) 2 . jQuery幫助之Ajax請求&#xff08;二&#xff09;jQuery.get(url,[data],[callback] 3 . jQuery幫助之Ajax請求&#xff08;三&am…

深入淺出之正則表達式(二)

深入淺出之正則表達式&#xff08;二&#xff09; http://dragon.cnblogs.com/archive/2006/05/09/394923.html 前言&#xff1a; 本文是前一片文章《深入淺出之正則表達式&#xff08;一&#xff09;》的續篇&#xff0c;在本文中講述了正則表達式中的組與向后引用&…

MVC(溫習深入)

MVC&#xff08;Model-View-Controller&#xff0c;模型—視圖—控制器模式&#xff09;是軟件工程中的一種軟件架構模式。它把軟件系統分為三個基本部分&#xff1a;模型&#xff08;Model&#xff09;&#xff0c;視圖&#xff08;View&#xff09;和控制器&#xff08;Contr…

面試官問:能否模擬實現JS的new操作符(高頻考點)

可以點擊上方的話題JS基礎系列&#xff0c;查看往期文章這篇文章寫于2018年11月05日&#xff0c;new模擬實現&#xff0c;Object.create是面試高頻考點&#xff0c;之前發布在掘金有近2萬人閱讀&#xff0c;現在發布到公眾號聲明原創。1. 前言這是面試官問系列的第一篇&#xf…