6

私は、1つのアプリケーションをC#で、もう1つのアプリケーションをPythonで作成するプロジェクトに取り組んでいます。C#アプリケーションは、データのストリームを継続的に分析し、何か興味深いものが検出されるたびにフラグを立てます。したがって、イベントが発生するたびに、Pythonアプリケーションはそれを読み取って独自のプロセスを続行する必要がありますが、他のフラグは送信され続けます。ご存知のとおり、C#アプリは、Pythonが計算を終了するのを待たずに、別のフラグを送信します。

それで、サブ/パブ(C#がパブリッシャー、Pythonがサブスクライバー)を作成できるかどうか疑問に思っていました。可能であれば、どうすればそれを実行できますか。それは良い考えだと思いますか?私はこの分野でかなり新しいので、他の可能性があるかどうか教えていただけますか?

あなたの助けのためのThx。

4

3 に答える 3

4

Redis pub/subは素晴らしいです...またはZeroMQ

于 2012-07-07T01:13:19.273 に答える
2

最も簡単な方法はPIPEコミュニケーションです。提案されていないもう1つの簡単な方法は、SOCKETプログラミングです。パイプ名前付きパイプは、(異なるプログラミング言語を介して)異なるプロセス間で通信するための優れたソリューションです。SOCKETプログラミングはこのようなものですが、より多くのアクセスレベルが必要になる可能性があり、セキュリティが低下する可能性があります。

他のタイプのIPCは使用できないようです。

詳細については、を参照してください。

于 2012-07-07T09:27:40.093 に答える
0

aktos-dcsおよびaktos-dcs-csライブラリを使用できます。私は、RFIDリーダー(Impinj製)をテレメトリシステムと通信させる(実際には統合する)ために、これらのライブラリを本番環境で使用することに成功しました。RFIDリーダーにはC#APIがあり、テレメトリシステムでPythonを多用しています。

最も単純なテストケースはピンガーポンガーアプリケーションであり、これらのライブラリでどのように見えるかを次に示します。

pinger.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using aktos_dcs_cs;

namespace pinger
{
    class Pinger : Actor
    {
        public void handle_PingMessage(Dictionary<string, object> msg)
        {
            Console.WriteLine("Pinger handled PingMessage: {0} ", msg["text"]);

            string msg_ser = @"
                    {""PongMessage"": 
                        {""text"": ""this is proper message from csharp implementation""}
                    }
                ";
            System.Threading.Thread.Sleep(2000);
            send(msg_ser);
        }

    }


    class Program
    {
        static void Main(string[] args)
        {
            Pinger x = new Pinger(); 
            Actor.wait_all(); 
        }
    }
}

ponger.py:

from aktos_dcs import *

class Pinger(Actor):
    def handle_PingMessage(self, msg_raw):
        msg = get_msg_body(msg_raw)
        print "Pinger got ping message: ", msg['text'], (time.time() - msg_raw['timestamp'])
        sleep(2)
        self.send({'PongMessage': {'text': "Hello ponger, this is pinger 1!"}})

if __name__ == "__main__":
    ProxyActor()
    pinger = Pinger()
    pinger.send({'PongMessage': {'text': "Hello ponger, this is STARTUP MESSAGE!"}})

    wait_all()
于 2016-01-14T11:08:43.580 に答える