如果我的应用程序中有内存密集型和算法性很强的部分,我希望用C或Java实现这些部分。将这些代码连接到Django/(Rails,Merb等)Web应用程序的最佳方式是什么?
liwlm1x91#
您是否尝试过为C/Java代码查找/编写消息/指令队列处理接口?通过这种方式,您可以将作业从Web应用传递到消息/指令队列,C/Java代码将在其中拾取消息并处理它们。对于Django,您可以选择使用类似Celery的代码。
czq61nw12#
这取决于您希望如何与它交互,以及您最喜欢什么。我通常将这些功能 Package 在一个漂亮的HTTP接口中,以便可以从Python访问它几乎每种语言都有HTTP库,并且很容易创建一个小的API。一旦它通过HTTP可用,它还允许您使用标准HTTP工具进行调试、缓存对于可以从队列中受益的较重任务处理,Celery/RabbitMQ功能强大,并且RabbitMQ可以通过多种语言进行接口。ZeroMQ也可以是一种非常灵活和轻量级的方法。顺便说一句,如果您可以将应用程序中算法密集的部分公式化为向量操作,请查看NumPy。
8ulbf1ek3#
对于Python与C/C的对话,可以用途:Extending Python with C or C++升压上述两种解决方案的思想是,用C/C编写内存密集型代码,然后从Python中调用它们。
3条答案
按热度按时间liwlm1x91#
您是否尝试过为C/Java代码查找/编写消息/指令队列处理接口?通过这种方式,您可以将作业从Web应用传递到消息/指令队列,C/Java代码将在其中拾取消息并处理它们。
对于Django,您可以选择使用类似Celery的代码。
czq61nw12#
这取决于您希望如何与它交互,以及您最喜欢什么。我通常将这些功能 Package 在一个漂亮的HTTP接口中,以便可以从Python访问它几乎每种语言都有HTTP库,并且很容易创建一个小的API。一旦它通过HTTP可用,它还允许您使用标准HTTP工具进行调试、缓存对于可以从队列中受益的较重任务处理,Celery/RabbitMQ功能强大,并且RabbitMQ可以通过多种语言进行接口。ZeroMQ也可以是一种非常灵活和轻量级的方法。
顺便说一句,如果您可以将应用程序中算法密集的部分公式化为向量操作,请查看NumPy。
8ulbf1ek3#
对于Python与C/C的对话,可以用途:
Extending Python with C or C++
升压
上述两种解决方案的思想是,用C/C编写内存密集型代码,然后从Python中调用它们。