當前位置:
首頁 > 最新 > 一文讀懂python進程間通信之匿名管道

一文讀懂python進程間通信之匿名管道

# -*- coding: utf-8 -*-

我們先看看進程間通信,然後輻射出去,看看哪些需要我們來學習

談起進程,應該都很熟悉,一個主機可能有很多服務,一個服務下可能有很多進程,那麼進程間通信的手段有哪些呢?

-簡單的文件

-命令行參數

-程序退出狀態

-shell環境變數

-標準流重定向

-os.popen和subprocess管理的流管道

以上這些簡單的機制都可以理解為程序間通信的手段;那麼除了這些機制外在Python庫中海油進程通信的其他工具,如套接字、共享內存、信號、匿名和具名管道等等...

匿名管道介紹:

因為在實際操作中匿名管道更傳統。先來了解一下管道,管道有兩種類型,具名管道和匿名管道(其他的自己玩玩網上衝浪就可以了解了)更傳統的匿名管道,通常與進程分支合用,作為一種在應用程序內部鏈接父進程及其子進程的手段。父進程和子進程通過共享的管道文件描述符進行交流,後者為派生的進程所繼承。因為線程在同一進程中運行,並且一般來說共享全局內存,所以匿名管道對線程也適用。

匿名管道的使用

import os, time

def child(pipeout):

zzz = 0

while True:

time.sleep(zzz)

msg = ("Spam %03d" % zzz).encode()

os.write(pipeout, msg)

zzz = (zzz+1) % 5

def parent():

pipein, pipeout = os.pipe()

if os.fork() == 0:

child(pipeout)

else:

while True:

line = os.read(pipein, 32)

print("Parent %d got [%s] at %s" % (os.getpid(), line, time.time()))

parent()

以上示例的腳本使用os.fork創建調用進程一份副本。分支後,原始的父進程及其子進程副本在分支前os.pipe創建的兩端進行交流。os.pipe調用返回一個包含兩個文件描述符的元組,這兩個文件描述符代表著根管道的輸入輸出端。

分支出來的子進程複製其父進程的文件描述符,所以在子進程中向管道輸出描述符的寫入可將數據發回管道的父進程,而這些管道是在子進程派生之前就已經創建好了。

注意:

可能有人會在window下運行此腳本。但是windows python標準版本提供pipe,但沒有fork,建議在Linux或類Unix系統平台運行此腳本或者使用Windows Python的Cygwin軟體包!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 長安壹飛 的精彩文章:

TAG:長安壹飛 |