Python:检测套接字何时出于任何原因断开连接? - python

我正在使用原始套接字接口(import socket)在Python 2.7.5中编写一个应用程序。

我需要知道是否有一种方法可以注册某种事件,或者轻松地定期进行测试(如果仍然连接并建立了TCP套接字连接)。

我发现的大多数建议都说“只是尝试读取它;如果关闭它,您会得到一个错误或没有字节”。但是,有时我还没有准备好从中使用read,但是我仍然想知道套接字是否已关闭,因此例如,我可以立即手动重新连接。

另外,从套接字进行read编码会删除从缓冲区读取的字节,因此,仅通过read编码来测试连接“活动性”似乎并不可行。

我有一个后台线程来检查连接活跃性。该线程可以每秒检查一次,以查看连接是否正常。如果将其删除,则可以调用函数或设置变量或其他东西,以便应用程序知道连接已关闭。知道为什么关闭它(通过对等方重置,超时等)将更加有用。

有什么建议吗?

参考方案

建议像本教程一样使用select http://docs.python.org/2/howto/sockets.html#non-blocking-sockets

如果套接字在输出可读列表中,则您可能会在某种程度上很接近该业务,因为该套接字上的recv将返回一些内容。可写列表的想法相同。您将可以发送一些东西。也许不是您想要的,但是总有没有总比没有好。 (实际上,任何运行状况良好的套接字都将返回可写状态-这仅意味着出站网络缓冲区空间可用。)

...如果套接字的这些输入列表中的某处某人死于讨厌的死亡,则选择将失败。

这是我通常使用的流程

import select
import socket

ip = '127.0.0.1'
port = 80

conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect((ip, port))

while True:
    try:
        ready_to_read, ready_to_write, in_error = \
            select.select([conn,], [conn,], [], 5)
    except select.error:
        conn.shutdown(2)    # 0 = done receiving, 1 = done sending, 2 = both
        conn.close()
        # connection error event here, maybe reconnect
        print 'connection error'
        break
    if len(ready_to_read) > 0:
        recv = conn.recv(2048)
        # do stuff with received data
        print 'received:', recv
    if len(ready_to_write) > 0:
        # connection established, send some stuff
        conn.send('some stuff')

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python:图像处理可产生皱纹纸效果 - python

也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

python JSON对象必须是str,bytes或bytearray,而不是'dict - python

在Python 3中,要加载以前保存的json,如下所示:json.dumps(dictionary)输出是这样的{"('Hello',)": 6, "('Hi',)": 5}当我使用json.loads({"('Hello',)": 6,…