我正在使用flask python框架编写一个Web应用程序。作为其某些功能的一部分,它需要运行一些已编译的程序(C ++代码,但我只能访问二进制文件)来执行某些操作(获取用户上传的一些文件,处理它们并生成一些输出文件。)
构建此类应用程序的最佳方法是什么?此代码没有库或API。
我可以使用subprocess
模块在每次需要时运行这个二进制文件但是我担心如果服务器获得太多请求会发生什么(进程是CPU密集型的)。
我想我可以设置它可以处理的并发请求数量的限制。有没有更好的解决方案?
(出于好奇,说我有CPP源代码,如何使用此代码构建Web应用程序?)
答案 0 :(得分:2)
我的直接建议是:
首先,使用二进制通过系统调用可能会在某种程度上起作用,虽然是黑盒子,正如你所提到的,你可能很容易遇到问题。您始终可以处理系统调用的返回值,但这又不太理想,因此包装在一个简单的API中可能只会提供有限的用途。我的直接建议是不要使用此选项,并尝试使用以下其中一个想法编译它以满足您的需求。
如果您有权访问源代码;创建一个python extension module,允许您与本机C ++代码进行交互。给定的链接可以比我自己更好地解释,但它可能是一种相当轻松的方式来集成代码,不需要像你提到的那样从二进制文件启动。
此外,要为C ++代码构建本机Web应用程序,我会转向Wt C++ web toolkit。这是一个Qt风格的框架,允许您使用本机C ++构建交互式Web页面并执行二进制文件以运行Web服务器并创建完全成熟的网站。如前所述,检查链接,你会更好地了解我在说什么。可能还有其他框架,但我已经使用过这个框架并且发现它非常直接。
答案 1 :(得分:0)
如果您有cpp源代码,可以通过swig
或boost
将python链接到它,以调用编译后的cpp对象模块(编译后生成的.o
文件)
参考swig教程 - http://www.swig.org/tutorial.html
答案 2 :(得分:0)
使用celery运行任务。它能够使调用异步,您还可以通过轮询或通过Web套接字与芹菜进行通信。
当需要处理大量任务时,建议使用Celery。