2

我有两个脚本正在运行,一个在端口:80 上,一个在端口:81 上。因为我们的一些用户在使用端口:81 的服务器上发生问题时遇到问题,所以我正在尝试实施这样的解决方法;

的做法,对大多数用户来说都很好:

  • AngularJS 应用程序请求example.com:81/getpdf/1
  • Flask 服务器使用 PhantomJS 和 ImageMagick 使用两个单独subprocess.Popen的调用和.wait()方法生成 PNG 和 PDF 文件
  • 使用 Flask 的send_file(),PDF 被发送回用户并开始下载

我对这个问题的解决方法:

  • AngularJS 请求example.com/getpdf/1
  • Flask 服务器 ( :80) 发出一个新的 GET 请求,r = requests.get(url_with_port_81),伪造旧的 AngularJS 请求来创建 PNG/PDF
  • 而不是使用send_file(),而是返回生成的 PDF 的路径
  • 我回来send_file(r.text)

现在,使用我的解决方法,我运行以创建 PNG/PDF 的子进程以某种方式崩溃。我必须sudo pkill python,而且只有当我这样做时,我才会得到一个 PNG,而我的服务器上的文件夹中没有数据。

基本上,PhantomJS 已经运行但没有加载任何数据(只有 html/css,但没有需要来自 Flask 服务器的重要内容)并崩溃。这怎么可能?我只是在伪造浏览器使用的请求requests.get,还是我不知道这里有什么?

我认为subprocess.Popen非阻塞的,所以我的数据请求仍然可以得到答复以填充 PNG/PDF?

4

1 回答 1

2

我终于找到了我subprocess一直崩溃的原因。显然,这是 Python < 2.7.3 中的一个错误,此处描述:http: //bugs.python.org/issue12786

我必须'close_fds=True'Popen通话中使用,一切都已解决。感谢您的努力,@Mark Hildreth!

于 2013-10-08T08:26:57.807 回答