gpt4 book ai didi

python - 从 Python 运行 Octave 任务

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:52 26 4
gpt4 key购买 nike

我有一个用 Octave 编写的非常复杂的计算代码和一个接收用户输入的 python 脚本,需要根据用户输入运行 Octave 代码。在我看来,我有以下选择:

  1. 将 Octave 代码移植到 python。
  2. 使用外部库(即 oct2py),使您能够从 python 运行 Octave/Matlab 引擎。
  3. 在 python 进程和 Octave 进程之间进行通信。一种可能性是使用 python 代码中的子进程并等待答案。

因为我不太愿意将我的代码移植到 python 并且我不想依赖外部库(如 oct2py)的维护,所以我赞成选项 3。但是,由于系统应该很好地扩展,我不想为每个请求生成一个新的 Octave 进程,任务队列系统似乎更合理。是否有任何(推荐的)任务队列系统可以在 python 中对任务进行排队,并在另一端有一个 Octave worker 来处理它?<​​/p>

最佳答案

这里描述的方式,选项 3 退化为选项 2,因为 Octave 没有明显的方式(API 或包)让“Octave worker”连接到任务队列。

only way Octave 做“网络”的是 the sockets package这意味着从头开始(在 Octave 中)实现与任务队列通信的协议(protocol)。

拥有“Octave worker”的最初动机是让 Octave 的主进程启动一次,然后“引导它”执行函数并返回结果,而不是在每次调用函数时都启动 Octave 的主进程.

由于 Octave 不能开箱即用地做“ worker ”(即 launches, listens to a 'channel' and executes code ),实现此目的的唯一其他方法是让任务队列框架全部在 Python 中工作,并且仅在需要其功能时调用 Octave,最有可能通过 oct2py(即选项 2)。

有许多不同的方法可以做到这一点,范围从 Redis , 至 PyPubSub , CeleryRabbitMQ .所有这些都很简单,而且有据可查。 PyPubSub 不需要任何额外的组件。

(请注意:使用 an 'executable' octave scriptcalling it via Python and blocking until it returns 的解决方案并不像听起来那么糟糕,而且 for some parallel-processing frameworks 是让同一个 Octave 脚本的多个副本对不同数据进行操作的唯一方法段。)

关于python - 从 Python 运行 Octave 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34115098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com