問題は次のとおりです。 2つのことをするpythonプログラムを呼び出します:rabbitmqサーバに接続し、2つのプロセスを起動するcプログラムを呼び出します。子によって継承されたPython RabbitMQ接続
pythonプログラムが終了すると、接続はまだ子供を担当して確立されます。
したがって、親が死んだ場合、子は親リソースを継承します。これは、Pythonスクリプトが終了したときに、私が得るものですnetstat -putan | grep rabbitmqip
tcp 0 0 localhost:39744 rabbitmqip:5672 ESTABLISHED 25693/child
をやっ
。
私はこのような場合に接続が失われると思います。
これはRabbitMQサーバーへの接続で発生すると思われます。通常のTCP接続では再生できません。
誰もこの問題を以前に持っていましたか?回避策はありますか?
Pythonコードは私のウサギの消費者になります.cプログラムは、ワーカーの仕事に基づいて産卵または殺されたバックグラウンドのスクリプトになります。私は消費者を殺すときにコネクションを確立することはできません。アクティブであるかどうかにかかわらず、子どもたちはキューから理解できないメッセージを受け取るためです。一例として
コード:
のPython:
connection = pika.BlockingConnection(pika.ConnectionParameters(host='RabbitServer'))
print ("Starting Child...")
system("/home/path/test/child")
print ("Done")
子プログラム。
pid_t pstartId, sessionId;
// Fork 1
pstartId = fork();
if (pstartId < 0) {
printf("The System can not create a proccess. \n");
perror("fork");
exit(EXIT_FAILURE);
}
if (pstartId > 0) { exit(EXIT_SUCCESS);}
// Fork 2
pstartId = fork();
if (pstartId < 0) {
printf("The System can not create a proccess. \n");
perror("fork");
exit(EXIT_FAILURE);
}
if (pstartId > 0) {exit(EXIT_SUCCESS);}
if ((sessionId = setsid()) < 0) {
printf("The System can not set a id session. \n");
perror("setid");
exit(EXIT_FAILURE);
}
if (chdir("/") < 0) {
printf("The System can not change dir /. \n");
perror("chdir");
exit(EXIT_FAILURE);
}
while(1){
syslog(LOG_INFO, "I'm a child");
sleep(1);
}
これが。 Popenは働いた。 – Illiax