Python では、マルチプロセッシング モジュールで redis-py を使用します。なぜ各プロセスが異なる fd なのですか?
テストコード:
# xiaorui.cc
import time
import multiprocessing
import redis
r = redis.Redis(host='127.0.0.1', port=6379, db=0)
def func(msg):
for i in xrange(30):
time.sleep(1)
print r.keys()
return "done " + msg
if __name__ == "__main__":
pool = multiprocessing.Pool(processes=4)
result = []
for i in xrange(4):
msg = "hello %d" %(i)
result.append(pool.apply_async(func, (msg, )))
pool.close()
pool.join()
for res in result:
print res.get()
print "Sub-process(es) done."
テスト結果:
[ruifengyun@xiaorui.cc ~]$ ps aux f|grep a.py
508 11704 5.0 0.0 421096 11664 pts/11 Sl+ 17:50 0:00 | \_ python a.py
508 11709 0.0 0.0 193760 7464 pts/11 S+ 17:50 0:00 | \_ python a.py
508 11710 0.0 0.0 193760 7468 pts/11 S+ 17:50 0:00 | \_ python a.py
508 11711 0.0 0.0 193760 7468 pts/11 S+ 17:50 0:00 | \_ python a.py
508 11712 0.0 0.0 193760 7476 pts/11 S+ 17:50 0:00 | \_ python a.py
508 11720 0.0 0.0 103248 832 pts/12 S+ 17:50 0:00 \_ grep a.py
[ruifengyun@xiaorui.cc ~]$ sudo lsof -p 11709|grep 6379
python 11709 ruifengyun 4u IPv4 4173927407 0t0 TCP localhost:51433->localhost:6379 (ESTABLISHED)
[ruifengyun@xiaorui.cc ~]$ sudo lsof -p 11710|grep 6379
python 11710 ruifengyun 4u IPv4 4173927417 0t0 TCP localhost:51435->localhost:6379 (ESTABLISHED)
[ruifengyun@xiaorui.cc ~]$ sudo lsof -p 11711|grep 6379
python 11711 ruifengyun 4u IPv4 4173927411 0t0 TCP localhost:51434->localhost:6379 (ESTABLISHED)
[ruifengyun@xiaorui.cc ~]$ sudo lsof -p 11712|grep 6379
python 11712 ruifengyun 4u IPv4 4173927416 0t0 TCP localhost:51436->localhost:6379 (ESTABLISHED)
各プロセスの redis conn fd が異なるのはなぜですか? 私のコグニティブでは、遅延モードでredis connectを作成するだけで、別のredis fdが出現します。
そして、すべての子プロセスは共有オブジェクト (redis connect fd) です。