我有一个非常复杂的计算代码用Octave编写,python脚本接收用户输入,需要根据用户输入运行Octave代码。在我看来,我有这些选择:
由于我非常不愿意将代码移植到python而且我不想依赖oct2py这样的外部库的维护,所以我赞成选项3.但是,由于系统应该很好地扩展,我不希望为每个请求生成一个新的八度音程进程,并且任务队列系统似乎更合理。是否有任何(推荐的)任务队列系统在python中排队任务并在另一端有一个八度工作程序处理它?</ p>
答案 0 :(得分:2)
这里描述的方式,选项3退化为选项2,因为Octave没有明显的方式(API或包)让'Octave worker'连接到任务队列。
only way Octave执行“网络”是the sockets package,这意味着实现从头开始与任务队列通信的协议(在Octave中)。
拥有'Octave worker'的最初动机是让Octave的主要进程启动一次,然后“指示它”执行函数并返回结果,而不是每次调用函数时启动Octave的主进程。
由于Octave无法开箱即用“工人”(launches, listens to a 'channel' and executes code),实现此目的的唯一方法是让任务队列框架全部在Python中运行,并且只在需要时调用Octave功能,最有可能通过oct2py
(即选项2)。
有许多不同的方法可以执行此操作,范围从Redis到PyPubSub,Celery和RabbitMQ。所有这些都很简单,也很好地记录在案。 PyPubSub不需要任何其他组件。
(正如注释:an 'executable' octave script,calling it via Python and blocking until it returns的解决方案并不像听起来那么糟糕而for some parallel-processing frameworks这是获得同一副本的唯一方法Octave脚本在不同的数据段上运行。)
答案 1 :(得分:0)
根据您的具体情况,所有三个选项都是合理的。
使用选项3实现我不想依赖维护oct2py等外部库,我赞成选项3
oct2py
。您可以重新发明它已经执行的操作或直接使用它。 oct2py
是纯Python,它具有许可许可证:如果它的开发明天就要停止;你可以把它的代码包括在你的旁边。