最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何發(fā)送與接收大型數(shù)組

 更新時(shí)間:2020年08月07日 09:02:55   作者:David Beazley  
這篇文章主要介紹了Python如何發(fā)送與接收大型數(shù)組,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

問(wèn)題

你要通過(guò)網(wǎng)絡(luò)連接發(fā)送和接受連續(xù)數(shù)據(jù)的大型數(shù)組,并盡量減少數(shù)據(jù)的復(fù)制操作。

解決方案

下面的函數(shù)利用 memoryviews 來(lái)發(fā)送和接受大數(shù)組:

# zerocopy.py

def send_from(arr, dest):
  view = memoryview(arr).cast('B')
  while len(view):
    nsent = dest.send(view)
    view = view[nsent:]

def recv_into(arr, source):
  view = memoryview(arr).cast('B')
  while len(view):
    nrecv = source.recv_into(view)
    view = view[nrecv:]

為了測(cè)試程序,首先創(chuàng)建一個(gè)通過(guò)socket連接的服務(wù)器和客戶端程序:

>>> from socket import *
>>> s = socket(AF_INET, SOCK_STREAM)
>>> s.bind(('', 25000))
>>> s.listen(1)
>>> c,a = s.accept()
>>>

在客戶端(另外一個(gè)解釋器中):

>>> from socket import *
>>> c = socket(AF_INET, SOCK_STREAM)
>>> c.connect(('localhost', 25000))
>>>

本節(jié)的目標(biāo)是你能通過(guò)連接傳輸一個(gè)超大數(shù)組。這種情況的話,可以通過(guò) array 模塊或 numpy 模塊來(lái)創(chuàng)建數(shù)組:

# Server
>>> import numpy
>>> a = numpy.arange(0.0, 50000000.0)
>>> send_from(a, c)
>>>

# Client
>>> import numpy
>>> a = numpy.zeros(shape=50000000, dtype=float)
>>> a[0:10]
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
>>> recv_into(a, c)
>>> a[0:10]
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
>>>

討論

在數(shù)據(jù)密集型分布式計(jì)算和平行計(jì)算程序中,自己寫程序來(lái)實(shí)現(xiàn)發(fā)送/接受大量數(shù)據(jù)并不常見。 不過(guò),要是你確實(shí)想這樣做,你可能需要將你的數(shù)據(jù)轉(zhuǎn)換成原始字節(jié),以便給低層的網(wǎng)絡(luò)函數(shù)使用。 你可能還需要將數(shù)據(jù)切割成多個(gè)塊,因?yàn)榇蟛糠趾途W(wǎng)絡(luò)相關(guān)的函數(shù)并不能一次性發(fā)送或接受超大數(shù)據(jù)塊。

一種方法是使用某種機(jī)制序列化數(shù)據(jù)——可能將其轉(zhuǎn)換成一個(gè)字節(jié)字符串。 不過(guò),這樣最終會(huì)創(chuàng)建數(shù)據(jù)的一個(gè)復(fù)制。 就算你只是零碎的做這些,你的代碼最終還是會(huì)有大量的小型復(fù)制操作。

本節(jié)通過(guò)使用內(nèi)存視圖展示了一些魔法操作。 本質(zhì)上,一個(gè)內(nèi)存視圖就是一個(gè)已存在數(shù)組的覆蓋層。不僅僅是那樣, 內(nèi)存視圖還能以不同的方式轉(zhuǎn)換成不同類型來(lái)表現(xiàn)數(shù)據(jù)。 這個(gè)就是下面這個(gè)語(yǔ)句的目的:

view = memoryview(arr).cast('B')

它接受一個(gè)數(shù)組 arr并將其轉(zhuǎn)換為一個(gè)無(wú)符號(hào)字節(jié)的內(nèi)存視圖。這個(gè)視圖能被傳遞給socket相關(guān)函數(shù), 比如 socket.send() send.recv_into() 。 在內(nèi)部,這些方法能夠直接操作這個(gè)內(nèi)存區(qū)域。例如,sock.send() 直接從內(nèi)存中發(fā)生數(shù)據(jù)而不需要復(fù)制。 send.recv_into() 使用這個(gè)內(nèi)存區(qū)域作為接受操作的輸入緩沖區(qū)。

剩下的一個(gè)難點(diǎn)就是socket函數(shù)可能只操作部分?jǐn)?shù)據(jù)。 通常來(lái)講,我們得使用很多不同的 send() recv_into() 來(lái)傳輸整個(gè)數(shù)組。 不用擔(dān)心,每次操作后,視圖會(huì)通過(guò)發(fā)送或接受字節(jié)數(shù)量被切割成新的視圖。 新的視圖同樣也是內(nèi)存覆蓋層。因此,還是沒(méi)有任何的復(fù)制操作。

這里有個(gè)問(wèn)題就是接受者必須事先知道有多少數(shù)據(jù)要被發(fā)送, 以便它能預(yù)分配一個(gè)數(shù)組或者確保它能將接受的數(shù)據(jù)放入一個(gè)已經(jīng)存在的數(shù)組中。 如果沒(méi)辦法知道的話,發(fā)送者就得先將數(shù)據(jù)大小發(fā)送過(guò)來(lái),然后再發(fā)送實(shí)際的數(shù)組數(shù)據(jù)。

以上就是Python如何發(fā)送與接收大型數(shù)組的詳細(xì)內(nèi)容,更多關(guān)于Python發(fā)送接收大型數(shù)組的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中dataclass庫(kù)實(shí)例詳解

    Python中dataclass庫(kù)實(shí)例詳解

    這篇文章主要介紹了Python中dataclass庫(kù),合理使用dataclass將會(huì)大大減輕開發(fā)中的負(fù)擔(dān),將我們從大量的重復(fù)勞動(dòng)中解放出來(lái),這既是dataclass的魅力,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-09-09
  • Python計(jì)算程序運(yùn)行時(shí)間的方法

    Python計(jì)算程序運(yùn)行時(shí)間的方法

    這篇文章主要介紹了Python計(jì)算程序運(yùn)行時(shí)間的方法,分別記錄起始時(shí)間與結(jié)束時(shí)間,計(jì)算兩者之間的差值來(lái)獲得程序的運(yùn)行時(shí)間,需要的朋友可以參考下
    2014-12-12
  • Python按條件批量刪除TXT文件行工具

    Python按條件批量刪除TXT文件行工具

    這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)按條件批量刪除TXT文件中行的工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Python 的七個(gè)HTTP請(qǐng)求庫(kù)對(duì)比小結(jié)

    Python 的七個(gè)HTTP請(qǐng)求庫(kù)對(duì)比小結(jié)

    本文主要介紹了Python 的七個(gè)HTTP請(qǐng)求庫(kù)對(duì)比小結(jié),文中通過(guò)圖表,示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • CentOS7下安裝python3.6.8的教程詳解

    CentOS7下安裝python3.6.8的教程詳解

    這篇文章主要介紹了CentOS7下安裝python3.6.8的教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Python 代碼實(shí)現(xiàn)各種酷炫功能

    Python 代碼實(shí)現(xiàn)各種酷炫功能

    這篇文章主要介紹了Python 代碼實(shí)現(xiàn)各種酷炫功能,生成二維碼、生成詞云、批量摳圖、文字情緒識(shí)別等功能分享,需要的小伙伴可以參考一下
    2022-03-03
  • Python簡(jiǎn)單獲取自身外網(wǎng)IP的方法

    Python簡(jiǎn)單獲取自身外網(wǎng)IP的方法

    這篇文章主要介紹了Python簡(jiǎn)單獲取自身外網(wǎng)IP的方法,涉及Python基于第三方平臺(tái)獲取本機(jī)外網(wǎng)IP的操作技巧,需要的朋友可以參考下
    2016-09-09
  • Python lxml解析HTML并用xpath獲取元素的方法

    Python lxml解析HTML并用xpath獲取元素的方法

    今天小編就為大家分享一篇Python lxml解析HTML并用xpath獲取元素的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • python基于機(jī)器學(xué)習(xí)預(yù)測(cè)股票交易信號(hào)

    python基于機(jī)器學(xué)習(xí)預(yù)測(cè)股票交易信號(hào)

    近年來(lái),隨著技術(shù)的發(fā)展,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)在金融資產(chǎn)量化研究上的應(yīng)用越來(lái)越廣泛和深入。目前,大量數(shù)據(jù)科學(xué)家在Kaggle網(wǎng)站上發(fā)布了使用機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型對(duì)股票、期貨、比特幣等金融資產(chǎn)做預(yù)測(cè)和分析的文章。本文就來(lái)看看如何用python預(yù)測(cè)股票交易信號(hào)
    2021-05-05
  • Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù)

    Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù)

    今天小編就為大家分享一篇Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01

最新評(píng)論

新邵县| 铅山县| 达尔| 濮阳市| 绵竹市| 萨迦县| 康定县| 陕西省| 巴林左旗| 汉源县| 红原县| 肇庆市| 手机| 遵化市| 仁布县| 上思县| 汝阳县| 漳州市| 农安县| 辽源市| 合作市| 绥宁县| 辉南县| 新闻| 阳东县| 嫩江县| 保定市| 始兴县| 杭锦后旗| 河间市| 自治县| 怀仁县| 灌阳县| 萍乡市| 昂仁县| 湖州市| 象州县| 昌都县| 法库县| 禹城市| 紫金县|