python流水線框架pypeln的安裝使用教程
1. 安裝和入門使用
安裝pip install pypeln
,基本元素如下:
2 基于multiprocessing.Process
這個(gè)是基于多進(jìn)程。
import pypeln as pl import time from random import random def slow_add1(x): time.sleep(random()) # <= some slow computation return x + 1 def slow_gt3(x): time.sleep(random()) # <= some slow computation return x > 3 data = range(10) # [0, 1, 2, ..., 9] stage = pl.process.map(slow_add1, data, workers=3, maxsize=4) stage = pl.process.filter(slow_gt3, stage, workers=2) data = list(stage) # e.g. [5, 6, 9, 4, 8, 10, 7]
3 基于threading.Thread
顧名思義,基于多線程。
import pypeln as pl import time from random import random def slow_add1(x): time.sleep(random()) # <= some slow computation return x + 1 def slow_gt3(x): time.sleep(random()) # <= some slow computation return x > 3 data = range(10) # [0, 1, 2, ..., 9] stage = pl.thread.map(slow_add1, data, workers=3, maxsize=4) stage = pl.thread.filter(slow_gt3, stage, workers=2) data = list(stage) # e.g. [5, 6, 9, 4, 8, 10, 7]
4 基于asyncio.Task
協(xié)程,異步io。
import pypeln as pl import asyncio from random import random async def slow_add1(x): await asyncio.sleep(random()) # <= some slow computation return x + 1 async def slow_gt3(x): await asyncio.sleep(random()) # <= some slow computation return x > 3 data = range(10) # [0, 1, 2, ..., 9] stage = pl.task.map(slow_add1, data, workers=3, maxsize=4) stage = pl.task.filter(slow_gt3, stage, workers=2) data = list(stage) # e.g. [5, 6, 9, 4, 8, 10, 7]
5 三者性能對(duì)比
IO 密集型應(yīng)用CPU等待IO時(shí)間遠(yuǎn)大于CPU 自身運(yùn)行時(shí)間,太浪費(fèi);常見(jiàn)的 IO 密集型業(yè)務(wù)包括:瀏覽器交互、磁盤請(qǐng)求、網(wǎng)絡(luò)爬蟲、數(shù)據(jù)庫(kù)請(qǐng)求等。
Python 世界對(duì)于 IO 密集型場(chǎng)景的并發(fā)提升有 3 種方法:多進(jìn)程、多線程、異步 IO(asyncio)。理論上講asyncio是性能最高的,原因如下:
1.進(jìn)程、線程會(huì)有CPU上下文切換
2.進(jìn)程、線程需要內(nèi)核態(tài)和用戶態(tài)的交互,性能開(kāi)銷大;而協(xié)程對(duì)內(nèi)核透明的,只在用戶態(tài)運(yùn)行
3.進(jìn)程、線程并不可以無(wú)限創(chuàng)建,最佳實(shí)踐一般是 CPU*2;而協(xié)程并發(fā)能力強(qiáng),并發(fā)上限理論上取決于操作系統(tǒng)IO多路復(fù)用(Linux下是 epoll)可注冊(cè)的文件描述符的極限
下面是一個(gè)數(shù)據(jù)庫(kù)訪問(wèn)的測(cè)試:
內(nèi)存:
串行:75M
多進(jìn)程:1.4G
多線程:150M
asyncio:120M
以上就是python流水線框架pypeln的安裝使用教程的詳細(xì)內(nèi)容,更多關(guān)于python流水線框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Django+Celery實(shí)現(xiàn)定時(shí)任務(wù)的示例
Celery是一個(gè)基于python開(kāi)發(fā)的分布式任務(wù)隊(duì)列,而做python WEB開(kāi)發(fā)最為流行的框架莫屬Django,本示例使用主要依賴包Django+Celery實(shí)現(xiàn)定時(shí)任務(wù),感興趣的朋友一起看看吧2021-06-06Python異常處理機(jī)制結(jié)構(gòu)實(shí)例解析
這篇文章主要介紹了Python異常處理機(jī)制結(jié)構(gòu)實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07在Linux上安裝Python的Flask框架和創(chuàng)建第一個(gè)app實(shí)例的教程
這篇文章主要介紹了在Linux上安裝Python的Flask框架和創(chuàng)建第一個(gè)app實(shí)例,包括創(chuàng)建一個(gè)HTML模版和利用Jinja2模板引擎來(lái)做渲染的步驟,需要的朋友可以參考下2015-03-03python字符串駐留機(jī)制的使用范圍知識(shí)點(diǎn)詳解
在本篇文章里小編給大家整理的是一篇關(guān)于python字符串駐留機(jī)制的使用范圍相關(guān)知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-09-09