我正在使用原始套接字接口(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,…