国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Python進(jìn)程間通信之命名管道

2020-02-16 02:09:04
字體:
供稿:網(wǎng)友

管道是一種簡單的FIFO通信信道,它是單向通信的。 通常啟動(dòng)進(jìn)程創(chuàng)建一個(gè)管道,然后這個(gè)進(jìn)程創(chuàng)建一個(gè)或者多個(gè)進(jìn)程子進(jìn)程接受管道信息,由于管道是單向通信,所以經(jīng)常需要?jiǎng)?chuàng)建兩個(gè)管道來實(shí)現(xiàn)雙向通信。

命名管道是對(duì)傳統(tǒng)管道的擴(kuò)展,默認(rèn)的管道是匿名管道,只在程序運(yùn)行時(shí)存在;而命名管道是持久化的,當(dāng)不需要時(shí)需要?jiǎng)h除它。

命名管道使用文件系統(tǒng),由mkfifo()方法創(chuàng)建。一旦創(chuàng)建了,兩個(gè)獨(dú)立的進(jìn)程都可以訪問它,一個(gè)讀,另外一個(gè)寫。

命名管道支持阻塞讀和阻塞寫操作: 如果一個(gè)進(jìn)程打開文件讀,它會(huì)阻塞直到另外一個(gè)進(jìn)程寫。 但是我們可以指定O_NONBLOCK選項(xiàng)來啟用非阻塞模式。

命名管道必須以只讀或者只寫的模式打開,它不能以讀+寫的模式打開,因?yàn)樗鼤r(shí)單向通信。如果要實(shí)現(xiàn)雙向通信,必須打開兩個(gè)命名管道。

下面是一個(gè) Python 使用命名管道來實(shí)現(xiàn)進(jìn)程間通信的例子

Server 端

import os, timeread_path = "/tmp/pipe.in"write_path = "/tmp/pipe.out"if os.path.exists(read_path):  os.remove(read_path)if os.path.exists(write_path):  os.remove(write_path)os.mkfifo(write_path)os.mkfifo(read_path)rf = os.open(read_path, os.O_RDONLY)wf = os.open(write_path, os.O_SYNC | os.O_CREAT | os.O_RDWR)while True:  s = os.read(rf, 1024)  print "received msg: %s" % s  if len(s) == 0:    time.sleep(1)    continue  if "exit" in s:    break  os.write(wf, s)os.close(rf)os.close(wf)

Client 端

import osimport timewrite_path = "/tmp/pipe.in"read_path = "/tmp/pipe.out"wf = os.open(write_path, os.O_SYNC | os.O_CREAT | os.O_RDWR)rf = Nonefor i in range(1, 11):  msg = "msg " + str(i)  len_send = os.write(wf, msg)  print "sent msg: %s" % msg  if rf is None:    rf = os.open(read_path, os.O_RDONLY)  s = os.read(rf, 1024)  if len(s) == 0:    break  print "received msg: %s" % s  time.sleep(1)os.write(wf, 'exit')os.close(rf)os.close(wf)

測試

首先運(yùn)行server.py 然后運(yùn)行client.py

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林站長站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 铁岭市| 瓮安县| 潮安县| 海口市| 武穴市| 开远市| 万全县| 潞城市| 涪陵区| 舞阳县| 和静县| 遂昌县| 龙陵县| 全椒县| 湖北省| 佳木斯市| 精河县| 达日县| 环江| 天气| 维西| 抚宁县| 永宁县| 博野县| 正阳县| 郯城县| 剑阁县| 阿巴嘎旗| 保山市| 江西省| 西林县| 诸城市| 磐安县| 弋阳县| 邯郸县| 阿巴嘎旗| 上思县| 永宁县| 昂仁县| 色达县| 土默特右旗|