3

我正在使用烧瓶 python 框架编写一个 Web 应用程序。作为其某些功能的一部分,它需要运行一些编译的程序(C++ 代码,但我只能访问二进制文件)来执行某些操作(获取用户上传的一些文件,处理它们并生成一些输出文件。)
构建这样一个应用程序的最佳方法是什么?此代码没有库或 API。

我可以在subprocess每次需要时使用该模块来运行这个二进制文件,但我担心如果服务器收到太多请求(该过程是 CPU 密集型的)可能会发生什么。我想我可以限制它可以处理的并发请求数。有没有更好的解决方案?

(只是出于好奇,假设我有 CPP 源代码,我怎么能去使用这个代码构建一个 Web 应用程序?)

4

3 回答 3

2

我的直接建议是:

  1. 首先,通过系统调用使用二进制文件可能会在某种程度上起作用,尽管它是一个黑盒,并且正如您所提到的,您很容易遇到问题。您总是有可能处理系统调用的返回值,但这并不理想,因此包装在一个简单的 API 中可能只会提供有限的用处。我的直接建议是不要使用此选项,并尝试使用以下想法之一根据您的需要编译它。

  2. 如果您可以访问源代码;创建一个允许您与本机 C++ 代码交互的python 扩展模块。给定的链接可以比我自己解释得更好,但它可能是一种相当轻松的方式来集成您的代码,而无需像您提到的那样从二进制文件启动。

  3. 此外,要为 C++ 代码构建本机 Web 应用程序,我会将您转向Wt C++ Web 工具包。这是一个 Qt 风格的框架,可让您使用本机 C++ 构建交互式网页并执行二进制文件以运行 Web 服务器并创建一个成熟的网站。如前所述,检查链接,您会更好地了解我在说什么。可能还有其他框架,但我已经使用过它并且发现它非常简单。

于 2012-11-14T12:33:42.153 回答
0

如果您有 cpp 源代码,您可以通过swigboost调用已编译的 cpp 对象模块(.o编译后生成的文件)将 python 链接到它。

参考 swig 教程 - http://www.swig.org/tutorial.html

于 2012-11-14T12:31:26.573 回答
0

使用celery运行任务。它具有使调用异步的能力,您还可以通过轮询或通过 Web 套接字与 celery 进行通信。

当需要处理大量任务时,建议使用 Celery。

于 2012-11-14T12:36:00.343 回答