子进程不等待并使PhantomJS崩溃

时间:2013-10-07 20:56:00

标签: python pdf flask python-requests

我运行了两个脚本,一个在端口上: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
  • 我现在返回生成的PDF的路径
  • ,而不是使用send_file()
  • 我返回send_file(r.text)

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

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

我认为subprocess.Popen 非阻止,因此仍然可以回答我的数据请求以填充PNG / PDF?

1 个答案:

答案 0 :(得分:2)

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

我必须在'close_fds=True'电话中使用Popen,所有内容都已修复。非常感谢您的努力,@ Mark Hildreth!