电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python如何發送與接收大型數組

瀏覽:10日期:2022-07-14 17:21:58

問題

你要通過網絡連接發送和接受連續數據的大型數組,并盡量減少數據的復制操作。

解決方案

下面的函數利用 memoryviews 來發送和接受大數組:

# zerocopy.pydef 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:]

為了測試程序,首先創建一個通過socket連接的服務器和客戶端程序:

>>> 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))>>>

本節的目標是你能通過連接傳輸一個超大數組。這種情況的話,可以通過 array 模塊或 numpy 模塊來創建數組:

# 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.])>>>

討論

在數據密集型分布式計算和平行計算程序中,自己寫程序來實現發送/接受大量數據并不常見。 不過,要是你確實想這樣做,你可能需要將你的數據轉換成原始字節,以便給低層的網絡函數使用。 你可能還需要將數據切割成多個塊,因為大部分和網絡相關的函數并不能一次性發送或接受超大數據塊。

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

本節通過使用內存視圖展示了一些魔法操作。 本質上,一個內存視圖就是一個已存在數組的覆蓋層。不僅僅是那樣, 內存視圖還能以不同的方式轉換成不同類型來表現數據。 這個就是下面這個語句的目的:

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

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

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

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

以上就是Python如何發送與接收大型數組的詳細內容,更多關于Python發送接收大型數組的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 | 好笔杆子网 - 公文写作学习交流分享平台| 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 彩信群发_群发彩信软件_视频短信营销平台-达信通| 钢骨架轻型板_膨石轻型板_钢骨架轻型板价格_恒道新材料 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 游戏版号转让_游戏资质出售_游戏公司转让-【八九买卖网】 | 北京乾茂兴业科技发展有限公司 | VOC检测仪-甲醛检测仪-气体报警器-气体检测仪厂家-深恒安科技有限公司 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 在线钠离子分析仪-硅酸根离子浓度测定仪-油液水分测定仪价格-北京时代新维测控设备有限公司 | 电加热导热油炉-空气加热器-导热油加热器-翅片电加热管-科安达机械 | 郑州爱婴幼师学校_专业幼师培训_托育师培训_幼儿教育培训学校 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 淘趣英语网 - 在线英语学习,零基础英语学习网站 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 深圳市八百通智能技术有限公司官方网站 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | 安规_综合测试仪,电器安全性能综合测试仪,低压母线槽安规综合测试仪-青岛合众电子有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 众能联合-提供高空车_升降机_吊车_挖机等一站工程设备租赁 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 车间除尘设备,VOCs废气处理,工业涂装流水线,伸缩式喷漆房,自动喷砂房,沸石转轮浓缩吸附,机器人喷粉线-山东创杰智慧 | 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 打孔器,打孔钳厂家【温州新星德牌五金工具】 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 | 防爆电机_ybx3系列电机_河南省南洋防爆电机有限公司 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 |