当前位置: 首页 > 面试题库 >

如何在Python中使用套接字作为上下文管理器?

欧阳成弘
2023-03-14
问题内容

看起来像这样自然是很自然的:

with socket(socket.AF_INET, socket.SOCK_DGRAM) as s:

但是Python并未为套接字实现上下文管理器。我可以轻松地将其用作上下文管理器吗?


问题答案:

socket模块相当底层,使您几乎可以直接访问C库功能

您始终可以使用contextlib.contextmanager装饰器来构建自己的装饰器:

import socket
from contextlib import contextmanager

@contextmanager
def socketcontext(*args, **kw):
    s = socket.socket(*args, **kw)
    try:
        yield s
    finally:
        s.close()

with socketcontext(socket.AF_INET, socket.SOCK_DGRAM) as s:

或用于contextlib.closing()达到相同效果:

from contextlib import closing

with closing(socket.socket(socket.AF_INET, socket.SOCK_DGRAM)) as s:

但是contextmanager()装饰器使您有机会首先使用套接字执行其他操作。

Python 3.x确实可以socket()创建上下文管理器,但是直到2016年Python
3.5周期才进行
更新,文档并未得到反映。请参阅源代码中的socket类,其中添加了__enter____exit__方法。



 类似资料:
  • 问题内容: 在这个问题中,我定义了一个包含上下文管理器的上下文管理器。完成此嵌套的最简单的正确方法是什么?我最后打电话了。但是,在中,我很确定我必须调用finally块,以防引发异常。如果出现问题,是否应该设置type_,value和traceback参数?我检查了,但找不到任何实用程序来帮助解决此问题。 来自问题的原始代码: 问题答案: 创建上下文管理器的简单方法是使用。像这样: 然后使用。语句

  • 本文向大家介绍python 上下文管理器使用方法小结,包括了python 上下文管理器使用方法小结的使用技巧和注意事项,需要的朋友参考一下 上下文管理器最常用的是确保正确关闭文件, with 语句的基本语法, with expression [as variable]:     with-block expression是一个上下文管理器,其实现了enter和exit两个函数。当我们调用一个wit

  • 问题内容: 我不明白为什么无法在此示例中模拟NamedTemporaryFile.name: 测试结果在: 问题答案: 您设置的模拟错误:不是上下文管理器,而是 返回 了一个上下文管理器。将您的设置行替换为: 这样您的测试就可以了。

  • 本文向大家介绍Python多个上下文管理器,包括了Python多个上下文管理器的使用技巧和注意事项,需要的朋友参考一下 示例 您可以同时打开多个内容管理器: 它与嵌套上下文管理器具有相同的效果:            

  • 本文向大家介绍Python中的上下文管理器和with语句的使用,包括了Python中的上下文管理器和with语句的使用的使用技巧和注意事项,需要的朋友参考一下 Python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于规定某个对象的使用范围。本文是针对于该功能的思考总结。 为什么需要上下文管理器? 首先,需要思索下为什么需要引入上下文管理器。

  • 我在使用useContext管理导航栏的状态时遇到问题。Atm我的应用程序在菜单切换后立即呈现菜单项。我希望此事件仅在单击一次时发生,并且按钮不记录console.log消息,它仅在我直接单击链接项ex:home时起作用。所以我有两个问题。如何管理导航栏状态以显示如何隐藏菜单项,而不必为其创建新组件?如何修复在菜单按钮本身或/和菜单项上触发的单击事件?下面您将为App.js、Layout.js、T