成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Node與Python 雙向通信的實(shí)現(xiàn)代碼

瀏覽:159日期:2022-06-15 08:01:29
目錄進(jìn)程通信進(jìn)程雙向通信存在問題總結(jié)

第三方數(shù)據(jù)供應(yīng)商把數(shù)據(jù)和Python封裝到一起,只能通過調(diào)用 Python方法來實(shí)現(xiàn)數(shù)據(jù)查詢,如果可以通過Node 簡(jiǎn)單封裝下實(shí)現(xiàn) Python 方法調(diào)用可以快速上線并節(jié)省開發(fā)成本。

最簡(jiǎn)單粗暴的通信方式是 Nodejs調(diào)用一下 Python 腳本,然后獲取子進(jìn)程的輸出,但是由于每次 Python 啟動(dòng)并加載數(shù)據(jù)包的過程比較漫長(zhǎng),所以對(duì)該過程優(yōu)化。

進(jìn)程通信

index.py

# 封裝的 Python 包, 體積巨大from mb import MB# 從數(shù)據(jù)包中查詢mbe.get(’1.0.1.0’)

index.js

const { spawn } = require(’child_process’);const ls = spawn(’python3’, [’index.py’]);ls.stdout.on(’data’, (data) => { console.log(`stdout: ${data}`);});ls.stderr.on(’data’, (data) => { console.error(`stderr: ${data}`);});ls.on(’close’, (code) => { console.log(`child process exited with code $[code]`);});

通過child_process.spawn來派生 Python 子進(jìn)程,監(jiān)聽 stdout 輸出。上述方式也是官方文檔中的示例,目前該示例存在兩個(gè)問題:

Nodejs 沒有向 Python 發(fā)送數(shù)據(jù)Nodejs 調(diào)用完畢后,Python 子進(jìn)程會(huì)退出;下次查詢需要再次調(diào)用Python命令進(jìn)行加載文件,查詢數(shù)據(jù);無法實(shí)現(xiàn)一次內(nèi)存加載,多次使用。進(jìn)程雙向通信

保證一次數(shù)據(jù)加載,多次使用的前提是 Python 進(jìn)程啟動(dòng)后不能退出。Python 進(jìn)程之所以退出是因?yàn)闊o事可做,所以常見的手段有循環(huán),sleep,監(jiān)聽端口,這些手段可以翻譯成同步阻塞任務(wù),同步非阻塞任務(wù),其中代價(jià)最小的就是同步非阻塞任務(wù),然后可以想到 Linux 的 select,epoll,簡(jiǎn)單搜索了下 Python 的 epoll,好像還有原生的包。

index.py - 通過 epoll 監(jiān)聽 stdin

import sysimport fcntlimport selectfrom mb import MBimport jsonmbe = MB(’./data’)# epoll 模型fd = sys.stdin.fileno()epoll = select.epoll()epoll.register(fd, select.EPOLLIN)try: while True:events = epoll.poll(10) # 同步非阻塞data = ’’for fileno, event in events: data += sys.stdin.readline() # 通過標(biāo)準(zhǔn)輸入獲取數(shù)據(jù) if data == ’’ or data == ’n’:continue items = xxx # 數(shù)處理過程 for item in items:result = mbe.get(item)sys.stdout.write(json.dumps(result, ensure_ascii=False) +’n’) # 寫入到標(biāo)準(zhǔn)輸出sys.stdout.flush() # 緩沖區(qū)刷新finally: epoll.unregister(fd) epoll.close()

index.js - 通過 stdin 發(fā)送數(shù)據(jù)

const child_process = require(’child_process’);const child = child_process.spawn(’python3’, [’./base.py’]);let callbacks = [], chunks=Buffer.alloc(0), chunkArr = [], data = ’’, onwork = false; // buffer 無法動(dòng)態(tài)擴(kuò)容 child.stdout.on(’data’, (chunk) => { chunkArr.push(chunk) if (onwork) return; onwork = true; while(chunkArr.length) {chunks = Buffer.concat([chunks, chunkArr.pop()]);const length = chunks.length;let trunkAt = -1;for(const [k, d] of chunks.entries()) { if (d == ’0x0a’) { // 0a 結(jié)尾data += chunks.slice(trunkAt+1, trunkAt=k);const cb = callbacks.shift();cb(null, data === ’null’ ? null : data )data = ’’; }}if (trunkAt < length) { chunks = chunks.slice(trunkAt+1)} } onwork = false;})setInterval(() => { if (callbacks.length) child.stdin.write(`n`); // Nodejs端的標(biāo)準(zhǔn)輸入輸出沒有flush方法,只能 hack, 寫入后python無法及時(shí)獲取到最新}, 500)exports.getMsg = function getMsg(ip, cb) { callbacks.push(cb) child.stdin.write(`${ip}n`); // 把數(shù)據(jù)寫入到子進(jìn)程的標(biāo)準(zhǔn)輸入}

Python 與 Nodejs 通過 stdio 實(shí)現(xiàn)通信; Python 通過 epoll 監(jiān)聽 stdin 實(shí)現(xiàn)駐留內(nèi)存,長(zhǎng)時(shí)間運(yùn)行。

存在問題 Nodejs 把標(biāo)準(zhǔn)輸出作為執(zhí)行結(jié)果,故 Python 端只能把執(zhí)行結(jié)果寫入標(biāo)準(zhǔn)輸出,不能有額外的打印信息 Nodejs 端標(biāo)準(zhǔn)輸入沒有 flush 方法,所以 Python 端事件觸發(fā)不夠及時(shí),目前通過在Nodejs端定時(shí)發(fā)送空信息來 hack 實(shí)現(xiàn) Buffer 沒法動(dòng)態(tài)擴(kuò)容,沒有C語言的指針好用,在解析 stdout 時(shí)寫丑總結(jié)

雖然可以實(shí)現(xiàn) Nodejs 和 Python 的雙向通信,然后由于上述種種問題,在這里并不推薦使用這種方式,通過 HTTP 或 Socket 方式比這個(gè)香多了。

到此這篇關(guān)于Nodejs與Python 雙向通信的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)Nodejs與Python雙向通信內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国内精品伊人久久久久av影院| 不卡视频在线看| 成人avav影音| 欧美午夜精品一区二区三区| 亚洲三级在线播放| 欧美久久一区| 国产亚洲精品中文字幕| www.亚洲精品| 欧美一区二区三区成人| 精品一区二区三区免费毛片爱| 裸体素人女欧美日韩| 亚洲色大成网站www久久九九| 欧美私人啪啪vps| 亚洲国产精品成人综合| 99久久精品免费看国产| 精品免费国产二区三区| 岛国一区二区在线观看| 在线电影欧美成精品| 韩国成人在线视频| 欧美午夜不卡在线观看免费| 免费观看在线色综合| 色先锋资源久久综合| 日韩专区一卡二卡| 一本色道久久加勒比精品| 性感美女久久精品| 国产一区二区你懂的| 一区二区免费在线播放| 国产欧美亚洲一区| 亚洲精品国产品国语在线app| 一区在线电影| 亚洲欧美一区二区三区国产精品 | 亚洲免费播放| 亚洲激情六月丁香| 乱人伦精品视频在线观看| 日本不卡123| 91精品蜜臀在线一区尤物| 成人成人成人在线视频| 久久久美女毛片| 欧美国产91| 国产精品美女久久久久高潮| 影音先锋在线一区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲国产成人自拍| 精品成人国产| 亚洲chinese男男1069| 欧洲av一区二区嗯嗯嗯啊| 狠狠色伊人亚洲综合成人| 日韩三区在线观看| 欧美激情一区二区三区在线视频| 国产精品国产自产拍高清av| 日韩午夜免费视频| 日本va欧美va精品| 这里只有精品电影| 成人高清视频免费观看| 国产精品久久久久婷婷| 国产欧美日韩一区二区三区在线| 日韩精品一区第一页| 欧美福利视频导航| 色综合一个色综合亚洲| 成人免费小视频| 可以免费看不卡的av网站| 国内精品在线播放| 国产视频一区二区三区在线观看| 亚洲精品韩国| 青青草成人在线观看| 91精品国产欧美一区二区18| 色综合网站在线| 亚洲一区二区三区视频在线播放| 可以看av的网站久久看| 国产·精品毛片| 国产精品第13页| 在线欧美日韩国产| 99麻豆久久久国产精品免费优播| 亚洲人成在线播放网站岛国| 久久久久网址| 粉嫩嫩av羞羞动漫久久久| 国产精品国产三级国产aⅴ入口| 国产精品夜夜夜| 国产乱码一区二区三区| 国产精品国产三级国产a| 色狠狠色狠狠综合| 成人高清在线视频| 亚洲综合一区二区三区| 欧美在线观看视频一区二区三区| 成人免费毛片a| 亚洲人成在线观看一区二区| 欧美日韩精品一区二区在线播放| 91麻豆精品一区二区三区| 一区二区三区中文免费| 欧美精品v日韩精品v韩国精品v| 欧美日韩mv| 九九精品视频在线看| 国产精品久久精品日日| 精品婷婷伊人一区三区三| 欧美另类综合| 麻豆国产精品官网| 中文字幕不卡的av| 欧洲日韩一区二区三区| 欧美日韩另类丝袜其他| 久久国产免费看| 国产精品理伦片| 精品1区2区3区| 亚洲经典一区| 丁香五精品蜜臀久久久久99网站| 亚洲精品网站在线观看| 日韩三级伦理片妻子的秘密按摩| 一本色道久久综合亚洲精品婷婷| 国产精选一区二区三区| 亚洲欧美另类图片小说| 91精品国产91久久久久久最新毛片 | 国产福利一区二区三区视频在线 | 久久狠狠久久综合桃花| 成人av高清在线| 亚洲成av人在线观看| 久久久亚洲午夜电影| 日本久久电影网| 亚洲一二三区在线| 高清不卡一二三区| 亚洲成年人影院| 欧美激情综合五月色丁香小说| 一本色道久久加勒比精品| 欧美精品福利| 国产精品影视在线观看| 亚洲国产视频一区| 国产嫩草影院久久久久| 欧美美女直播网站| 国产亚洲欧美一区二区三区| 91在线观看一区二区| 麻豆成人免费电影| 亚洲码国产岛国毛片在线| 欧美成人一级视频| 在线精品视频免费播放| 韩日视频一区| www.欧美.com| 久久aⅴ国产欧美74aaa| 一区二区三区久久久| 精品国偷自产国产一区| 欧美在线综合视频| 国产精品毛片在线看| 91网站黄www| 国产盗摄女厕一区二区三区 | 久久久国际精品| 这里只有精品99re| 日本高清不卡在线观看| 99精品视频免费全部在线| 欧美国产91| 99精品视频一区| 国产福利不卡视频| 麻豆国产一区二区| 午夜精品福利一区二区三区av| 亚洲人成电影网站色mp4| 久久久精品免费网站| 日韩午夜精品电影| 欧美视频一区二区三区四区 | 麻豆精品传媒视频| 国产欧美日韩伦理| 精品成人一区| 黄色国产精品| 欧美福利精品| av中文字幕亚洲| 国内精品久久久久影院薰衣草 | 97精品国产97久久久久久久久久久久| 韩国毛片一区二区三区| 蜜桃精品视频在线| 午夜久久久影院| 一区二区三区欧美激情| 亚洲男人电影天堂| 国产精品美女久久久久aⅴ| 国产亚洲成aⅴ人片在线观看 | 国产日韩欧美a| 久久影院电视剧免费观看| 日韩午夜小视频| 欧美一二三区在线| 911精品产国品一二三产区| 欧美视频一区二区三区四区 | 欧美亚洲专区| 免播放器亚洲| 久久国产日韩欧美| 色诱亚洲精品久久久久久| 新狼窝色av性久久久久久| 国产亚洲永久域名| 亚洲欧美成人综合| 久久大逼视频| 久久久久久久久久码影片| 久久天堂精品| 久久一区中文字幕| 久热精品视频| 欧美无砖砖区免费| 91精品国产一区二区三区蜜臀| 777a∨成人精品桃花网| 5566中文字幕一区二区电影| 日韩一级精品视频在线观看| 日韩欧美成人午夜| 久久久精品一品道一区| 国产女人18毛片水真多成人如厕| 国产精品国产a| 亚洲美女免费在线| 天堂精品中文字幕在线| 久久国产精品72免费观看| 国产精品69毛片高清亚洲|