亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

問題

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

解決方案

下面的函數(shù)利用 memoryviews 來發(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:]

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

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

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

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

本節(jié)的目標(biāo)是你能通過連接傳輸一個超大數(shù)組。這種情況的話,可以通過 array 模塊或 numpy 模塊來創(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ù)密集型分布式計算和平行計算程序中,自己寫程序來實現(xiàn)發(fā)送/接受大量數(shù)據(jù)并不常見。 不過,要是你確實想這樣做,你可能需要將你的數(shù)據(jù)轉(zhuǎn)換成原始字節(jié),以便給低層的網(wǎng)絡(luò)函數(shù)使用。 你可能還需要將數(shù)據(jù)切割成多個塊,因為大部分和網(wǎng)絡(luò)相關(guān)的函數(shù)并不能一次性發(fā)送或接受超大數(shù)據(jù)塊。

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

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

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

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

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

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

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

相關(guān)文章

  • Python?的賦值,淺拷貝和深拷貝詳解

    Python?的賦值,淺拷貝和深拷貝詳解

    這篇文章主要為大家介紹了Python?的賦值,淺拷貝和深拷貝,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • 在python中實現(xiàn)發(fā)送短信功能

    在python中實現(xiàn)發(fā)送短信功能

    工作中我們經(jīng)常會用到發(fā)短信的需求,那么如何在python代碼中實現(xiàn)發(fā)短息你的需求呢,本文我們就一起深入探討下,文中有詳細的代碼示例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-04-04
  • python教程十行代碼教你語音轉(zhuǎn)文字QQ微信聊天

    python教程十行代碼教你語音轉(zhuǎn)文字QQ微信聊天

    QQ上面發(fā)的語音消息是可以直接文字識別的,但是微信為什么沒有呢?是因為技術(shù)太難實現(xiàn)嗎?這個很簡單啊!今天給大家介紹一下語音轉(zhuǎn)文字的原理
    2021-09-09
  • Python asyncio常用函數(shù)使用詳解

    Python asyncio常用函數(shù)使用詳解

    Asyncio在經(jīng)過一段時間的發(fā)展以及獲取Curio等第三方庫的經(jīng)驗來提供更多的功能,目前高級功能也基本完善,但是相對于其他語言,Python的Asyncio高級功能還是不夠的,但好在Asyncio的低級API也比較完善
    2023-03-03
  • 淺談Python中的bs4基礎(chǔ)

    淺談Python中的bs4基礎(chǔ)

    今天小編就為大家分享一篇關(guān)于Python中的bs4基礎(chǔ),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 在python 不同時區(qū)之間的差值與轉(zhuǎn)換方法

    在python 不同時區(qū)之間的差值與轉(zhuǎn)換方法

    今天小編就為大家分享一篇在python 不同時區(qū)之間的差值與轉(zhuǎn)換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Django admin model 漢化顯示文字的實現(xiàn)方法

    Django admin model 漢化顯示文字的實現(xiàn)方法

    今天小編就為大家分享一篇Django admin model 漢化顯示文字的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python通過Pillow實現(xiàn)圖片對比

    Python通過Pillow實現(xiàn)圖片對比

    這篇文章主要介紹了Python Pillow實現(xiàn)圖片對比,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python讀取Excel的方法實例分析

    Python讀取Excel的方法實例分析

    這篇文章主要介紹了Python讀取Excel的方法,實例分析了Python操作Excel文件的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-07-07
  • python的數(shù)學(xué)算法函數(shù)及公式用法

    python的數(shù)學(xué)算法函數(shù)及公式用法

    在本篇內(nèi)容里小編給大家分享了一篇關(guān)于python的數(shù)學(xué)算法函數(shù)及公式用法,有興趣的朋友們可以參考下。
    2020-11-11

最新評論