【问题标题】:What are the best ways to have a python program and c program share data让python程序和c程序共享数据的最佳方法是什么
【发布时间】:2014-11-18 10:00:19
【问题描述】:

Python 程序做前端工作,C 程序做后端工作。 它们中的每一个都是一个单独的过程。

Python 进程充当主进程,向 C 进程发送信号和事件。

C 进程生成统计信息、计数器和信息,这些信息将发送回 python 进程,然后将其显示给用户。

它们之间会有双工通信

在搜索了不同的技术之后,我发现以下是我可以做到的一些方法:

1. Create a UDP/TCP socket between the 2 processes.
2. Use a memory mapped file.

传递的数据应该是什么格式?

1. Should I use variable size structures?
2. Should I use Tag Length Value Format?
3. Should I use XML?  

我可以有一个两个进程都能理解的通用文件吗?

例如,具有要传递的数据格式的通用头文件。

不同种类的数据报文是

1. Signal messages from python to c.
2. Signal messages from c to python.
3. Heartbeat messages from python to c.
4. Stats messages from c to python.
5. Log messages from c to python.
6. Progress messages from c to python.
7. Update messages from python to c 

对于C而言,每条消息都是C结构。

【问题讨论】:

  • 请提供您的环境的详细信息,例如允许的延迟(实时还是慢速?),典型的消息大小(几个字节或 MB 或 TB?),所需的吞吐量(偶尔的消息或 1Gtps?),这些进程是如何产生的(一个是另一个的孩子,还是完全独立的? ),您是否控制了这两个进程的源代码?什么是可靠性要求(如果一个进程很慢,另一个进程应该阻止还是丢弃消息?)

标签: python c


【解决方案1】:

不允许评论,所以:为什么是简单的管道 |还不够?

【讨论】:

  • 什么是“不允许评论”?请解释你的答案
  • @Riad:就像“我不能对这个问题发表评论,因为我没有 50 名声望,所以我这样问我的问题。”
  • @JdeHaan 你如何通过 shell 管道发回消息?
  • @deets: 好吧,你得用fifo作弊:mkfifo fifo ./process1 argument1 fifo ; rm fifo 见stackoverflow.com/questions/5129276/…
【解决方案2】:

最简单的:文本文件。

第二个最简单的:json 文件。

更有趣、最灵活:将您的​​ C 程序包装在 Python 运行程序中,使用 ctypes 在此进程中进行通信。

【讨论】:

    【解决方案3】:

    我会考虑为此使用 nanomsg。 http://nanomsg.org/ 这是一个简单易用的纯 C 语言 IPC 库,还提供了良好的 python 绑定。

    或者,如果您愿意,可以使用它更旧但也很棒的 ZeroMQ。

    最后但同样重要的是,虽然多进程方法是一件好事 (tm),但您可以考虑使用 ctypes 并围绕它构建一个 python 包装器。这种方法的优点是您可以利用 python 的强大功能,同时不会损失性能。例如。只需几行 python 代码,你就可以成为多处理。

    【讨论】:

    • 扩展python wrapper方法:你也可以使用SWIGcython来连接你的c代码和python。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多