App下載

python流水線框架pypeln的安裝使用教程

別動(dòng)我的月亮 2021-08-17 16:10:52 瀏覽數(shù) (3141)
反饋

在計(jì)算機(jī)科學(xué)中,流水線式的指令讀取是指在系統(tǒng)處理數(shù)據(jù)時(shí),每個(gè)時(shí)鐘脈沖都接受下一條處理數(shù)據(jù)的指令。這樣可以提高系統(tǒng)處理數(shù)據(jù)的速度,python也有這樣的流水線框架,它就是pypeln,那么python流水線框架pypeln怎么安裝呢,又該如何使用呢?接下來就來看看這篇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);常見的 IO 密集型業(yè)務(wù)包括:瀏覽器交互、磁盤請(qǐng)求、網(wǎng)絡(luò)爬蟲、數(shù)據(jù)庫請(qǐng)求等。
Python 世界對(duì)于 IO 密集型場景的并發(fā)提升有 3 種方法:多進(jìn)程、多線程、異步 IO(asyncio)。理論上講asyncio是性能最高的,原因如下:
1.進(jìn)程、線程會(huì)有CPU上下文切換
2.進(jìn)程、線程需要內(nèi)核態(tài)和用戶態(tài)的交互,性能開銷大;而協(xié)程對(duì)內(nèi)核透明的,只在用戶態(tài)運(yùn)行
3.進(jìn)程、線程并不可以無限創(chuàng)建,最佳實(shí)踐一般是 CPU*2;而協(xié)程并發(fā)能力強(qiáng),并發(fā)上限理論上取決于操作系統(tǒng)IO多路復(fù)用(Linux下是 epoll)可注冊(cè)的文件描述符的極限

在這里插入圖片描述

下面是一個(gè)數(shù)據(jù)庫訪問的測試:

在這里插入圖片描述

內(nèi)存:
串行:75M
多進(jìn)程:1.4G
多線程:150M
asyncio:120M

以上就是python流水線框架pypeln的安裝使用教程的詳細(xì)內(nèi)容,更多python流水線框架的資料請(qǐng)關(guān)注W3Cschool其它相關(guān)文章!


0 人點(diǎn)贊