2017-08-05 9 views
0

ここに私のPythonコードです。マルチプロセッシングでデータを共有するために使用されるIPCメカニズムは何ですか?2つのPythonプロセスの間にあるのでしょうか?

#!/usr/bin/env python 
import multiprocessing 
import time 

def worker(q): 
    while True: 
     data = q.get() 
     print 'worker: got: %d' % data 
     if data == -1: 
      print 'worker: done' 
      break 

def master(): 
    q = multiprocessing.Queue() 
    p = multiprocessing.Process(target=worker, args=(q,)) 
    p.start() 

    for i in range(5): 
     q.put(i) 
     print 'master: put: %d' % i 
     time.sleep(1) 

    q.put(-1) 
    p.join() 

    print 'master: done' 

master() 
print 'exiting ...' 

次は、このコードをDebian 9 GNU/Linuxシステムで実行したときの出力です。

$ python q.py 
master: put: 0 
worker: got: 0 
master: put: 1 
worker: got: 1 
master: put: 2 
worker: got: 2 
master: put: 3 
worker: got: 3 
master: put: 4 
worker: got: 4 
worker: got: -1 
worker: done 
master: done 
exiting ... 

私は、マスター・プロセスと ワーカープロセス ソケット、メッセージキュー、共有メモリを介してキューに置かれているデータを通信していることをいくつかの証拠を見つけようとしています。しかし、私はそれに賛成するどんな の証拠も見つけられないようです。データは、ワーカープロセスに マスタープロセスから転送multiprocessing.Queueに入れてどのように

$ ps -ef | grep python | grep -v grep; netstat -nopa | grep python; ipcs 
lone  2914 9836 2 12:54 pts/1 00:00:00 python q.py 
lone  2915 2914 0 12:54 pts/1 00:00:00 python q.py 
(Not all processes could be identified, non-owned process info 
will not be shown, you would have to be root to see it all.) 

------ Message Queues -------- 
key  msqid  owner  perms  used-bytes messages 

------ Shared Memory Segments -------- 
key  shmid  owner  perms  bytes  nattch  status 
0x00000000 163840  lone  600  393216  2   dest 
0x00000000 262145  lone  600  393216  2   dest 
0x00000000 360450  lone  600  393216  2   dest 
0x00000000 142344195 lone  600  524288  2   dest 
0x00000000 101941252 lone  600  4194304 2   dest 
0x00000000 950277  lone  600  524288  2   dest 
0x00000000 118194183 lone  600  696320  2   dest 
0x00000000 118292488 lone  600  4153344 2   dest 
0x00000000 117899273 lone  600  4153344 2   dest 
0x00000000 118226954 lone  600  696320  2   dest 
0x00000000 123535371 lone  600  86016  2   dest 
0x00000000 123338764 lone  600  1728512 2   dest 
0x00000000 123240461 lone  600  1798144 2   dest 
0x00000000 123568144 lone  600  86016  2   dest 
0x00000000 137330705 lone  600  32768  2   dest 
0x00000000 137232402 lone  600  81920  2   dest 
0x00000000 29098003 lone  600  4194304 2   dest 
0x00000000 137265172 lone  600  81920  2   dest 
0x00000000 137297941 lone  600  151552  2   dest 
0x00000000 35258391 lone  600  393216  2   dest 
0x00000000 35291160 lone  600  12288  2   dest 
0x00000000 35323929 lone  600  12288  2   dest 
0x00000000 35356698 lone  600  393216  2   dest 
0x00000000 35520539 lone  600  12288  2   dest 
0x00000000 35422236 lone  600  393216  2   dest 
0x00000000 35455005 lone  600  12288  2   dest 

------ Semaphore Arrays -------- 
key  semid  owner  perms  nsems 
  • multiprocessing.Queueのデータをマスタプロセスからワーカープロセスに転送するために使用されたIPCメカニズムの証拠を見つけるためにどのコマンドを実行できますか?
+1

それは面白い質問です。 'マルチプロセッシング'はクロスプラットフォームとなるように設計されています。 POSIX IPCが使用されているかどうかはわかりません。 –

+0

@cᴏʟᴅsJohn John Zwinckの答えを確認してください。 –

答えて

0

Pythonはオープンソースであり、あなたははっきりここでの実装を見ることができます:https://github.com/python/cpython/blob/master/Lib/multiprocessing/queues.py

それはここで実装されPipeを使用しています:https://github.com/python/cpython/blob/master/Lib/multiprocessing/connection.pyここで実装os.pipe()使用

、:https://github.com/python/cpython/blob/master/Modules/posixmodule.c

ここに記載されているpipe2()を使用している文書:http://man7.org/linux/man-pages/man2/pipe.2.html

関連する問題