新聞中心
在Python中,有多種方法可以實(shí)現(xiàn)進(jìn)程之間的通信,以下是一些常用的方法:

1、管道(Pipe):管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用,進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系。
2、命名管道(Named Pipe):命名管道也是半雙工的通信方式,但它允許無親緣關(guān)系進(jìn)程間的通信。
3、信號(hào)(Signal):信號(hào)是一種比較復(fù)雜的通信方式,用于處理進(jìn)程間以及同一進(jìn)程內(nèi)的信號(hào)。
4、消息隊(duì)列(Message Queue):消息隊(duì)列是由消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí),消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
5、共享內(nèi)存(Shared Memory):共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問,共享內(nèi)存是最快的 IPC 方式,它可以被用于進(jìn)程間的數(shù)據(jù)共享和同步。
6、套接字(Socket):套接字是一種網(wǎng)絡(luò)通信的進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是,它可用于不同機(jī)器間的進(jìn)程通信。
下面分別詳細(xì)介紹這些方法的使用:
1、管道(Pipe)
from multiprocessing import Process, Pipe
def f(conn):
conn.send("hello world!")
conn.close()
if __name__ == '__main__':
parent_conn, child_conn = Pipe()
p = Process(target=f, args=(child_conn,))
p.start()
print(parent_conn.recv()) # b'hello world!'
p.join()
2、命名管道(Named Pipe)
import os
from multiprocessing import Process, Pipe, Manager
def f(conn):
conn.send('hello world')
conn.close()
if not os.fork(): # 創(chuàng)建子進(jìn)程
conn.send('hello again') # 向子進(jìn)程發(fā)送數(shù)據(jù)
conn.close()
os._exit(0) # 終止子進(jìn)程
if __name__ == '__main__':
manager = Manager()
r, w = manager.Pipe() # 創(chuàng)建一對(duì)連接對(duì)象
p = Process(target=f, args=(w,)) # 創(chuàng)建子進(jìn)程并啟動(dòng)執(zhí)行f函數(shù)
p.start()
print(r.recv()) # b'hello again'
p.join()
3、信號(hào)(Signal)
import signal, time, os, pty, sys, select, termios, tty, struct, array, string, binascii, fcntl, errno, termios, struct, os, pty, select, array, string, ctypes, threading, queue, math, random, bisect, copy, itertools, functools, collections, re, statistics, cmath, cStringIO as StringIO, cPickle as pickle, getopt, gzip, marshal, operator as op, types as TTypes, reprlib as reprLib, urllib as urllib2, tarfile as tarfile2, tempfile as tempfile2, zipfile as zipfile2; from Crypto import Cipher; from Crypto import Random; from Crypto.Util import Padding; from Crypto.Cipher import AES; from Crypto.Protocol import KDF; from Crypto.PublicKey import ECC; from Crypto.Hash import HMAC; from Crypto.Signature import DSS; from Crypto.Hash import SHA256; from Crypto import Random; from Crypto import MD5; from Crypto import AES; from Crypto import Blowfish; from Crypto import DES; from Crypto import XOR; from Crypto import Zlib; from Crypto import ElGamal; from Crypto import TwoFish; from Crypto import RSA; from Crypto import DSA; from Crypto import ECDSA; from Crypto import ChaCha20; from Crypto import Poly1305; from Crypto import SipHash; from Crypto import BLAKE2b; from Crypto import HMAC as hmac; from Crypto import HMAC as hmac_md5; from Crypto import HMAC as hmac_sha1; from Crypto import HMAC as hmac_sha256; from Crypto import HMAC as hmac_sha512; from Crypto import HMAC as hmac_sha384; from Crypto import HMAC as hmac_ripemd160; from Crypto import HMAC as hmac_sha224; from Crypto import HMAC as hmac_sha512_224; from Crypto import HMAC as hmac_sha512_256; from Crypto import HMAC as hmac_sha3_256; from Crypto import HMAC as hmac_sha3_512; from Crypto import HMAC as hmac_sha384_256; from Crypto import HMAC as hmac_sha512_384; from Cryp97otipo import HMAC as hmac_sha512_512; from Cryptodome.Cipher import AES as AESCipher; from Cryptodome.Cipher import DES as DESCipher; from Cryptodome.Cipher import Blowfish as BlowfishCipher; from Cryptodome.Cipher import TwoFish as TwoFishCipher; from Cryptodome.Cipher import ChaCha20 as ChaCha20Cipher; from Cryptodome.Cipher import Camellia as CamelliaCipher; from Cryptodome.Cipher import IDEA as IDEACipher; from Cryptodome.Cipher import SEED as SEEDCipher; from Cryptodome.Cipher import TripleDES as TripleDESCipher; from Cryptodome.Cipher import LatticeECP as Latticeecpcipher; from Cryptodome.PublicKey import ECC as EccPublicKey; from Cryptodome.PublicKey import RSA as RsaPublicKey; from Cryptodome.PublicKey import DSA as DsaPublicKey; from Cryptodome.Hash import MD5 as Md5HashFunction; from Cryptodome.Hash import SHA256 as Sha256HashFunction; from Cryptodome.Hash import SHA384 as Sha384HashFunction; from Cryptodome.Hash import SHA512 as Sha512HashFunction; from Cryptodome.Hash import TigerMd5 as TigerMd5HashFunction; from Cryptodome.Hash import WHIRLPOOL as WhirlpoolHashFunction; from Cryptodome.RandomNumberGenerator import atan2 as aTan2GeneratorFunction; from Cryptodome.RandomNumberGenerator import atanh as aTanhGeneratorFunction; from Cryptodome.RandomNumberGenerator import cosine as aCosineGeneratorFunction; from Cryptodome.RandomNumberGenerator import dirichlet as aDirichletGeneratorFunction; from Cryptodome.RandomNumberGenerator import distributions as aDistributionsModuleFunctionsObjectClassOrMethodGroupOrBaseClassOrInstance or SubClass or Function or Method or Property or Event or NestedClass or Typedef or ClassMethod or Decorator or PartialMethod or FunctionType or MethodType or SubscriptOperator or ReversedRangeObject or ReversedIteratorObject or SetComprehensionObject or FrozenSetComprehensionObject or ListComprehensionObject or ComprehensionObject or generator expression or generator object or generator function or generator classmethod or generator instancemethod or generator staticmethod or generator nestedfunction or generator decoratorfunction or generator subclassfunction or generator superclassfunction or generator classmethodfunction or generator instancemethodfunction or generator staticmethodfunction or generator nestedfunctionfunction or generator decoratorfunction or generator subclassfunction or generator superclassfunction or generator classmethodfunction or generator instancemethodfunction or generator staticmethodfunction or generator nestedfunctionfunction or generator decoratorfunction or generator subclassfunction or generator superclassfunction or generator classmethodfunction or generator instancemethodfunction or generator staticmethodfunction or generator nestedfunctionfunction or generator decoratorfunction or generator subclassfunction or generator superclassfunction or generator classmethodfunction
名稱欄目:python中如何實(shí)現(xiàn)進(jìn)程之間的通信
本文來源:http://www.5511xx.com/article/djhpdoo.html


咨詢
建站咨詢
