iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python之怎么实现延迟操作
  • 697
分享到

python之怎么实现延迟操作

Python 2023-05-16 17:05:55 697人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

python实现延迟操作Python 想实现延迟的操作是需要应用time ,然后在使用time的sleep 方法比如我想写一个延迟1秒打印一次的操作import time for i in range(0, 10): time.sl

python实现延迟操作

Python 想实现延迟的操作是需要应用time ,然后在使用time的sleep 方法

比如我想写一个延迟1秒打印一次的操作

import time
for i in range(0, 10):
    time.sleep(1)
    print(i)

Python延迟加载问题

Python里面的延迟加载用得非常多,其主要思想是延迟所要引入类的实例化,节省一些初始化所需要的时间和空间。

这种思想在Django中应用得也是非常广泛,比如ORM的QuerySet,还有鉴权中间件中的request.user等等,这些都是利用了延迟加载的思想。

本文就是通过例子来分析延迟加载的思想。

实现延迟加载的基本思路是我创建一个类,我们将我们需要实例化的类传给他,这时该类都会变成一个延迟加载类,在应用的时候,虽然我实例化了这个延迟加载类,但是我们要引用的类就没有实例化。

就像下面这样:

class User(object):
    def __init__(self):
        self.name = 'haibo'
        self.age = 23
def test():
    return User()
#初始化该延迟加载类
user = CommonLazyObject(lambda :test())
#此时我们要引用的类才执行
user.age = 28

上面我定义了一个User类,它是我们在程序中要引用的类,CommonLazyObject是我们定义的延迟加载类(后面再说)。通过延迟加载类,我们不必要提前初始化它,只有我们想进行如下面的user.age的操作的时候,才会进行实例化。

好,下面看一下延迟加载类的具体实现过程。

思想:我们对于一个实例化的操作,无非最终会归结为__getattr__,__setattr__等运算符,因此只要我们定义好这些运算符就可以实现这些延迟,即只有执行这些操作的时候,才去真正实例化我们想要实例化的类:

#建立一个空的对象
empty = object()
#一个装饰器,对__getattr__进行装饰,使得其可以进行类的实例化
def proxy_getattr(func):
    def wrapper(self,*args):
        if self._wrapper is empty:
            self._init_object()
        return func(self._wrapper,*args)
    return wrapper
class LazyObject(object):
    def __init__(self):
        self._wrapper = empty
    __getattr__ = proxy_getattr(getattr)
        #进行赋值操作的时候,看是实例化类,还是对类的实例进行赋值操作。因为下面我们要进行实例化类的操作。
    def __setattr__(self, key, value):
        if key == '_wrapper':
            self.__dict__['_wrapper'] = value
        else:
            if self._wrapper is empty:
                self._init_object()
            setattr(self._wrapper,key,value)
        #在子类中,你应该重新定义它,你通过它,来实现你想要通过何种方式实例化你的类。
    def _init_object(self):
        pass

先看上面的__setattr__,当我们执行user.age=28的赋值操作的时候,就会调用该运算符,如果该延迟类中并没有实例化我们要引入的类,就会先进行实例化,即调用self._init_object,并赋值给_wrapper。如果已经实例化完成,那么该实例的__setattr__方法就会立即执行。

同理,__getattr_也是一个道理,我想print user.name ,首先要检查引用的类是否已经实例化,如果没有实例化就先实例化,然后再调用该实例的__getattr__。

好,再看一个实现实例化的子类:

class CommonLazyObject(LazyObject):
    def __init__(self,func):
        self.__dict__['_wrapperfunc'] = func
        super(CommonLazyObject,self).__init__()
    def _init_object(self):
        self._wrapper = self._wrapperfunc()

这个子类实例化的过程很简单,就直接调用了。

以上就是python之怎么实现延迟操作的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: python之怎么实现延迟操作

本文链接: https://www.lsjlt.com/news/210305.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python之怎么实现延迟操作
    python实现延迟操作python 想实现延迟的操作是需要应用time ,然后在使用time的sleep 方法比如我想写一个延迟1秒打印一次的操作import time for i in range(0, 10): time.sl...
    99+
    2023-05-16
    Python
  • python之如何实现延迟操作
    目录python实现延迟操作Python延迟加载问题总结python实现延迟操作 python 想实现延迟的操作是需要应用time ,然后在使用time的sleep 方法 比如我想写...
    99+
    2023-05-18
    python实现延迟操作 python延迟操作 python延迟
  • Android中怎么实现延迟操作
    这篇文章给大家介绍Android中怎么实现延迟操作,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android 三种延迟操作的实现方法一、线程new Thread(new Runnable(){&n...
    99+
    2023-05-30
    android
  • Go+Redis实现延迟队列实操
    目录前言简单的实现定义消息PushConsume存在的问题多消费者实现定义消息PushConsume存在的问题总结前言 延迟队列是一种非常使用的数据结构,我们经常有需要延迟推送处理消...
    99+
    2024-04-02
  • Spark中的延迟操作是什么
    延迟操作(Delayed Operations)是指Spark中的转换操作(transformation)不会立即执行,而是等到触发...
    99+
    2024-03-05
    Spark
  • Linux中怎么实现延缓操作
    Linux中怎么实现延缓操作,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在内核中计时的头函数是#includeHz符号指出每秒钟产生的时钟滴答数,也就是1秒钟产生的时间中断。...
    99+
    2023-06-17
  • Linux时间延迟及延缓操作方法是什么
    这篇文章主要讲解了“Linux时间延迟及延缓操作方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux时间延迟及延缓操作方法是什么”吧!在内核中计时的头函数是#includeHz...
    99+
    2023-06-17
  • 基于rabbitmq延迟插件怎么实现分布式延迟任务
    本文小编为大家详细介绍“基于rabbitmq延迟插件怎么实现分布式延迟任务”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于rabbitmq延迟插件怎么实现分布式延迟任务”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-26
  • SSIS 中怎么实现延迟验证
    今天就跟大家聊聊有关SSIS 中怎么实现延迟验证,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一,延迟验证属性延迟验证属性作用于Package,Ta...
    99+
    2024-04-02
  • Linux内核定时器与延迟工作怎么实现
    本篇内容介绍了“Linux内核定时器与延迟工作怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!内核定时器软件上的定时器最终要依靠硬件时...
    99+
    2023-06-16
  • 怎么在Redis中实现延迟队列和分布式延迟队列
    这篇文章给大家介绍怎么在Redis中实现延迟队列和分布式延迟队列,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 实现一个简单的延迟队列。  我们知道目前JAVA可以有DelayedQueue,我们首先开一个Dela...
    99+
    2023-06-15
  • 使用Redis怎么实现延迟队列
    本篇文章给大家分享的是有关使用Redis怎么实现延迟队列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。方案一:采用通过定时任务采用数据库/非关系型数据库轮询方案。优点: 实现简...
    99+
    2023-06-15
  • Thymeleaf数据延迟加载怎么实现
    这篇文章主要介绍“Thymeleaf数据延迟加载怎么实现”,在日常操作中,相信很多人在Thymeleaf数据延迟加载怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Th...
    99+
    2024-04-02
  • Java中怎么实现单任务延迟
    今天就跟大家聊聊有关Java中怎么实现单任务延迟,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java单任务延迟代码创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行...
    99+
    2023-06-17
  • js怎么实现让某个动作延迟几秒执行
    这篇“js怎么实现让某个动作延迟几秒执行”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“js怎么实现让某个动作延迟几秒执行”文...
    99+
    2023-07-02
  • Hibernate操作延迟加载的关联是什么
    这篇文章主要讲解了“Hibernate操作延迟加载的关联是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate操作延迟加载的关联是什么”吧!默认情况下,Hibernate 3...
    99+
    2023-06-17
  • 怎么使用PHP实现延迟页面跳转
    本篇内容主要讲解“怎么使用PHP实现延迟页面跳转”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PHP实现延迟页面跳转”吧!使用PHP sleep()函数sleep()函数是PHP提供的一...
    99+
    2023-07-05
  • js实现让某个动作延迟几秒执行
    目录js让某个动作延迟几秒执行js延迟函数delay的使用js让某个动作延迟几秒执行 setTimeout(function (){                  $(butto...
    99+
    2024-04-02
  • RabbitMQ消息队列怎么实现延迟任务
    这篇文章主要介绍“RabbitMQ消息队列怎么实现延迟任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“RabbitMQ消息队列怎么实现延迟任务”文章能帮助大家解决问题。一、序言延迟任务应用广泛,延...
    99+
    2023-06-29
  • python如何实现类似defer的延迟调用
    这篇文章给大家分享的是有关python如何实现类似defer的延迟调用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现类似 defer 的延迟调用在 Golang 中有一种延迟调用的机制,关键字是 defer,...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作