我是靠谱客的博主 烂漫斑马,最近开发中收集的这篇文章主要介绍python contextmananger装饰器与with,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果想自定义一个类或者函数使用with语句,除了在类中自己定义__enter__()方法和__exit__()方法外,还可以使用contextmananger装饰器。

contextmananger装饰器将yield之前的部分当做__enter__()方法,将yield之后的部分当做__exit__()方法。

 
  
import requests
import time
import signal
from contextlib import contextmanagerclass TimeoutException(Exception):
pass


@contextmanager
def time_limit(seconds):
    def signal_handler(signum, frame):
        raise TimeoutException, "Timed out!"
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(seconds)
# yield之前的代码当做__enter__()方法
try: yield

# yield之后的部分当做__exit__()方法
finally: signal.alarm(0) while True: try: # limit the execution time of function with time_limit(1): requests.post(url, data={"a": 1}, timeout=1.1) # requests.post(url, data, verify=False) time.sleep(3) except TimeoutException, msg: print "Timed out!" # print msg raise TimeoutException, "Time out!"

上述代码功能和下面的代码相同

import requests
import time
import signal

url = "http://127.0.0.1:8000/acceptpost/"


# simple one

def signal_handler(signum, frame):
    raise Exception("Timed out!")


signal.signal(signal.SIGALRM, signal_handler)
signal.alarm(1)   # 1 seconds
try:
    req = requests.post(url=url, data={"a": 1})
    time.sleep(10)
except Exception, msg:
    print "Timed out!"
signal.alarm(0)
time.sleep(1)

 

转载于:https://www.cnblogs.com/buxizhizhoum/p/8243848.html

最后

以上就是烂漫斑马为你收集整理的python contextmananger装饰器与with的全部内容,希望文章能够帮你解决python contextmananger装饰器与with所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部