我有两个脚本正在运行,一个在端口: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?