相关疑难解决方法(0)

如何判断python中的连接是否已经死亡

我希望我的python应用程序能够告诉另一端的套接字何时被删除.有这个方法吗?

python sockets

57
推荐指数
4
解决办法
12万
查看次数

当客户端过早断开连接时,如何对烧瓶上的管道错误进行异常处理?

我正在使用flask进行开发,而不是生产,我有一个ajax请求的视图,如下所示:

@application.route('/xyz/<var>/', methods=['GET'])
def getAjax(var):
    ...
    return render_template(...)
Run Code Online (Sandbox Code Playgroud)

我也threaded=true用于开发.每当我调用那个ajax请求然后只是关闭请求它的选项卡时,我会收到一个错误:

Traceback (most recent call last):   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 593, in process_request_thread
self.finish_request(request, client_address)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 651, in __init__ 2015-07-07 09:46:09,430 127.0.0.1 - - [07/Jul/2015 09:46:09] "GET /xyz/List/ HTTP/1.1" 200 -
self.finish()   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 710, in finish
self.wfile.close()   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 279, in close
self.flush()   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 303, in flush
self._sock.sendall(view[write_offset:write_offset+buffer_size]) error: [Errno 32] Broken pipe
Run Code Online (Sandbox Code Playgroud)

我可以有一个try: …

python ajax flask

8
推荐指数
1
解决办法
4107
查看次数

Flask:当用户在执行一个长进程时关闭浏览器会发生什么?

情况如下:

我有一个应用程序,前端使用 Angularjs,后端使用 Flask。

我有一条看起来像这样的路线:

@app.route('/api/route1', methods=['POST'])
def route1():
    result = some_package.long_task()
    result2 = some_package.short_task(result)
    return jsonify(result)
Run Code Online (Sandbox Code Playgroud)

long_task函数正在执行一些 bash 命令,使用check_output,使用数据库,读写文件等。可能需要几个小时才能完成。

假设用户厌倦了等待并在进程开始 10 分钟后关闭浏览器窗口。

我的问题是:

  • 将两者long_taskshort_task要被执行的?
  • 这种情况是否有可能造成任何内存泄漏?
  • 是否有可能知道用户在某个时候关闭了浏览器?(包括当我尝试返回响应时:是否有可能知道响应未送达?)
  • 这个问题的答案是否取决于我使用的是什么服务器?(龙卷风,uWSGI...)

非常感谢你的回答。

python flask

6
推荐指数
1
解决办法
3356
查看次数

将文件从s3 Bucket下载到USERS计算机

目标

从s3 Bucket下载文件到用户计算机.

上下文

我正在为React应用程序开发Python/Flask API.当用户单击前端的"下载"按钮时,我想将相应的文件下载到他们的计算机上.

我试过的

import boto3 s3 = boto3.resource('s3') s3.Bucket('mybucket').download_file('hello.txt', '/tmp/hello.txt')

我目前正在使用一些代码来查找downloads文件夹的路径,然后将该路径作为第二个参数插入download_file(),以及他们尝试下载的存储桶上的文件.

这在本地工作,测试运行正常,但一旦部署,我遇到了问题.代码将找到SERVER的下载路径,并在那里下载文件.

解决这个问题的最佳方法是什么?我已经研究过,无法找到一个很好的解决方案,可以将文件从s3存储桶下载到用户下载文件夹.非常感谢任何帮助/建议.

python api operating-system amazon-s3 web-development-server

5
推荐指数
2
解决办法
5174
查看次数

如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

在这篇文章之后,我可以将tail -f日志文件发送到网页:

from gevent import sleep
from gevent.wsgi import WSGIServer
import flask
import subprocess

app = flask.Flask(__name__)

@app.route('/yield')
def index():
    def inner():
        proc = subprocess.Popen(
                ['tail -f ./log'],
                shell=True,
                stdout=subprocess.PIPE
                )
        for line in iter(proc.stdout.readline,''):
            sleep(0.1)
            yield line.rstrip() + '<br/>\n'

    return flask.Response(inner(), mimetype='text/html')

http_server = WSGIServer(('', 5000), app)
http_server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

这种方法有两个问题。

  1. tail -f log关闭网页后,该过程将持续存在。访问http://localhost:5000/yield n 次后会有 n 个 tail 进程
  2. 一次只能有1个客户端访问http://localhost:5000/yield

我的问题是,是否可以让flask在有人访问页面时执行shell命令,并在客户端关闭页面时终止该命令?就像Ctrl+C之后tail -f log。如果没有,还有哪些替代方案?为什么我一次只能有 1 个客户端访问该页面?

注意:我正在研究启动/停止任意 shell 命令的一般方法,而不是特别尾随文件

python linux subprocess flask

2
推荐指数
1
解决办法
5425
查看次数