Kivy 异步任务
如果要进行一些非常耗时的操作(例如:爬虫等),那么页面就会在这里卡住,而系统就会以为这个软件无响应,并提示关闭,可以说明用户体验极差,因此我们在此处引入异步操作。
在py中引入事件调节器,并在处理具体业务逻辑的异步方法async def pulse里让程序休眠两分钟。
pythonProject6\MRWord\asynico_task\asynico_insert_date.py
import asyncio
import threading
import logging
from kivy.event import EventDispatcher
class EventLoopWorker(EventDispatcher):# 定义唯一事件__events__ = ('on_pulse',)def __init__(self, file_path, **kwargs):super().__init__(**kwargs)# 制定目标self._thread = threading.Thread(target=self._run_loop)self._thread.daemon = Trueself.loop = Noneself._pulse = Noneself._pulse_task = Noneself.src = file_pathdef _run_loop(self):self.loop = asyncio.get_event_loop_policy().new_event_loop()asyncio.set_event_loop(self.loop)self._restart_pulse()self.loop.run_forever()def start(self):self._thread.start()async def pulse(self):""" 处理具体业务逻辑 """import timelogging.info("Upload is ready, filepath is %s" % self.src)# 休眠两分钟time.sleep(120)logging.info("Upload shutdown")self.__init__(self.src)def _restart_pulse(self):""" 启动或重置任务 """if self._pulse_task is not None:self._pulse_task.cancel()self._pulse_task = self.loop.create_task(self.pulse())def on_pulse(self, *_):""" EventDispatcher 事件必须添加的方法 """pass
0 events = (‘on_pulse’,) 是什么作用,可以删除吗
在这个代码中,__events__ = ('on_pulse',)
是一个类变量,它定义了该类所支持的事件。在这个例子中,EventLoopWorker
类支持一个名为 on_pulse
的事件。
这个类变量的作用是为了方便其他代码使用该类时能够知道可以触发哪些事件。通过定义 __events__
变量,其他开发者可以清楚地知道该类支持哪些事件,并可以根据需要进行相应的处理。
如果你不需要使用 on_pulse
事件,你可以删除 __events__ = ('on_pulse',)
这行代码。但是请注意,如果其他代码依赖于该事件,删除这行代码可能会导致其他部分的功能出现问题。
1 _pulse 和_pulse_task 是什么
在这个EventLoopWorker类中,_pulse
和_pulse_task
都是实例属性。其中_pulse
是一个标记,用于指示工作线程是否应该停止执行任务并退出。而_pulse_task
则是定时任务,用于触发on_pulse事件。当_pulse
为True时,工作线程会在下一次循环时退出。
在此之前,需要说明一下EventDispatcher是什么。EventDispatcher是一个事件调度器,可以用来注册、分发和处理事件。EventLoopWorker继承了EventDispatcher,并定义了自己的唯一事件on_pulse。在_run_loop方法中,每隔一段时间就会触发on_pulse事件,这个事件会被注册的回调函数所处理。
src
是传入的参数,表示工作线程需要处理的目标文件路径。
2 asyncio 是什么
asyncio — Asynchronous I/O — Python 3.12.3 documentation
asyncio是Python的标准库之一,它是一种基于协程的异步IO编程库。通过使用asyncio可以方便地编写高效的异步IO程序,避免了多线程或多进程编程的复杂性和开销。asyncio提供了事件循环、任务、协程、回调、异步IO等功能,可以用于编写高效的网络应用、Web框架、爬虫等。
在上述代码中,asyncio.get_event_loop_policy()获取事件循环的策略,并且创建了一个新的事件循环loop,接着将新的事件循环设置为当前的事件循环,最后启动了事件循环。
asyncio.get_event_loop_policy() 是一个函数,它返回当前事件循环策略的实例。在 asyncio 中,事件循环负责协程的调度和管理,而事件循环策略则是事件循环的实现机制。asyncio.get_event_loop_policy() 返回的是一个策略对象,可以通过该对象创建、获取、设置事件循环。
在默认情况下,asyncio 会使用 asyncio.DefaultEventLoopPolicy() 策略来创建事件循环,但是在某些情况下,我们可能需要使用其他的策略来实现事件循环。
asyncio.get_event_loop_policy()是一个函数,它返回当前事件循环策略的实例。事件循环策略用于管理asyncio事件循环的行为和属性。在Python 3.7之前,asyncio只支持单个事件循环策略,但是在Python 3.7中,可以通过实现自定义事件循环策略来管理多个事件循环。get_event_loop_policy()函数返回的实例可以用于获取和修改事件循环策略的行为和属性。
关于循环策略实例,它通常包含以下属性和方法:
- asyncioloop:获取当前事件循环策略的事件循环实例。
- set_event_loop:将指定的事件循环设置为当前循环策略的事件循环。
- get_child_watcher:获取当前事件循环策略的子进程监视器实例。
- set_child_watcher:将指定的子进程监视器设置为当前循环策略的子进程监视器。
- get_exception_handler:获取当前事件循环策略的异常处理函数。
- set_exception_handler:将指定的异常处理函数设置为当前循环策略的异常处理函数。
- get_name:获取当前事件循环策略的名称。
3 asyncio.get_event_loop_policy()是一个函数,它返回当前事件循环策略的实例是什么样子的?请给出一个实例参考一下
asyncio.get_event_loop_policy()是一个函数,它返回当前事件循环策略的实例。在Python 3.10中,asyncio的默认策略将更改为ProactorEventLoopPolicy,而在之前的版本中,默认策略为SelectorEventLoopPolicy。
下面是一个使用SelectorEventLoopPolicy策略的示例:
import asyncioloop = asyncio.get_event_loop()
print(type(loop))
输出结果为:
<class 'asyncio.selector_events.SelectorEventLoop'>
请给出一个使用asyncio.get_event_loop_policy() 的具体案例学习
asyncio.get_event_loop_policy()
是用于获取异步事件循环策略的函数。它返回一个事件循环策略对象,可以使用该对象来创建事件循环。
以下是一个使用 asyncio.get_event_loop_policy()
的具体案例,用于创建异步事件循环和运行协程:
import asyncioasync def coroutine():print('This is a coroutine.')loop = asyncio.get_event_loop_policy().get_event_loop()
loop.run_until_complete(coroutine())
上面的代码中,我们定义了一个协程 coroutine()
,然后通过 asyncio.get_event_loop_policy()
获取了默认的事件循环策略对象,并使用 get_event_loop()
方法创建了事件循环。最后,通过调用 run_until_complete()
方法运行协程。
4 loop.create_task()
create_task()
是 asyncio 包中的一个方法,用于创建一个协程任务并将其添加到事件循环中。该方法的作用是将协程转化为一个 task 对象,并加入到事件循环中,使其被调度运行。
在你提供的代码中,create_task()
方法用于创建一个协程任务并将其添加到事件循环中,其中 self.pulse()
是一个协程函数,用于进行心跳检测。这样就可以通过 asyncio 事件循环的机制,自动运行心跳检测协程。
需要注意的是,使用 create_task()
方法创建的任务是非阻塞的,即异步执行,不会阻塞当前线程。同时,在协程运行完成后,会自动返回一个 future 对象,可以通过该对象获取协程运行的结果或状态。
5 loop.call_soon()
loop.call_soon() 是 asyncio 的一个方法,用于将一个回调函数添加到事件循环中。当事件循环运行时,该回调函数会被执行。它的作用是将任务放入事件循环中,等待事件循环调度执行。此方法返回一个 asyncio.Handle 对象,它可以用来取消该回调函数的执行。
具体来说,当我们想要在 asyncio 中执行一些异步操作时,可以使用 loop.call_soon() 方法将这些操作封装成一个协程,然后添加到事件循环中。一旦事件循环开始运行,这些协程就会按照添加的顺序依次执行。
举个例子,如果我们想要在 asyncio 中发起一个 HTTP 请求,可以使用 aiohttp 库提供的异步请求方法,并将其封装成一个协程。然后使用 loop.call_soon() 方法将该协程添加到事件循环中,等待事件循环调度执行。
6 loop.call_later
loop.call_later()
是 Python 中 asyncio 的方法之一,它允许您安排在指定时间之后执行的回调函数。具体来说,它将在事件循环中安排一个定时器,并在定时器触发时执行指定的回调函数。
使用 loop.call_later()
可以很方便地处理一些需要在一段时间之后才能处理的任务,例如在等待某些资源可用时进行轮询。
下面是使用 loop.call_later()
的一个简单示例:
import asyncioasync def hello():print("Hello")await asyncio.sleep(1)print("World")def say_hello_later(loop):loop.create_task(hello())loop = asyncio.get_event_loop()
loop.call_later(2, say_hello_later, loop)
loop.run_forever()
以上代码将会在 2 秒钟后输出 “Hello”,然后等待 1 秒钟再输出 “World”。
Event Loop — Python 3.12.3 documentation
loop.call_later() 的执行顺序如何保证?
在 Python 的 asyncio 模块中,loop.call_later() 是一种在指定时间后调用指定函数的方式。它的执行顺序是由事件循环机制来保证的,即当我们使用 loop.call_later() 注册一个任务时,事件循环会将该任务放到一个任务队列中。然后,事件循环会不断地从任务队列中获取任务并执行,直到队列为空或者事件循环被关闭。
需要注意的是,loop.call_later() 注册的任务并不会立即执行,而是在指定的时间后才会执行。如果多个任务的执行时间相同,则它们的执行顺序是随机的,但是如果它们的执行时间不同,则会按照执行时间从小到大的顺序执行。
7 loop = asyncio.get_event_loop()
loop = asyncio.get_event_loop() 是一个创建一个事件循环的方法。asyncio是Python中用于异步编程的库,它提供了一种基于事件循环的异步模型,能够帮助我们更加高效地处理I/O密集型任务。在使用asyncio时,我们需要创建一个事件循环,然后将任务添加到事件循环中执行,通过future对象来获取任务的执行结果。get_event_loop() 方法就是用来创建事件循环的,它会返回当前线程的事件循环实例,如果当前线程没有事件循环实例,则会自动创建一个。一般来说,在使用asyncio时都需要先创建一个事件循环,再将任务添加到事件循环中执行。
8 threading.Thread.start()
threading.Thread.start() 是 Python 中的一个方法,它用于启动一个新的线程,并让这个线程开始执行。这个方法会在后台创建一个新的线程,并调用线程的 run() 方法,在这个方法中定义线程要执行的任务。
需要注意的是,start() 方法只能在一个 Thread 实例中调用一次,否则会抛出 RuntimeError 异常。
以下是一个简单的示例:
import threadingdef my_func():print("Hello, world!")my_thread = threading.Thread(target=my_func)
my_thread.start()
9 self._pulse_task.cancel() 中.cancle()
cancel()
方法用于取消一个正在进行的任务。在本例中,self._pulse_task.cancel()
方法用于取消正在进行的 _pulse_task
任务,以便能够重新启动或重置任务。当任务被取消时,它不会再继续执行,并且会返回一个布尔值,表明任务是否已经被取消。如果任务尚未执行,那么它将不会被执行,也不会返回任何值。需要注意的是,一旦任务被取消,它就不能再次被启动或者执行。
相关文章:
Kivy 异步任务
如果要进行一些非常耗时的操作(例如:爬虫等),那么页面就会在这里卡住,而系统就会以为这个软件无响应,并提示关闭,可以说明用户体验极差,因此我们在此处引入异步操作。 在py中引入事件调节器,并在…...
DEV--C++小游戏(吃星星(0.1))
目录 吃星星(0.1) 简介 头文件 命名空间变量 副函数 清屏函数 打印地图函数 移动函数 主函数 0.1版完整代码 吃星星(0.1) 注:版本<1为未实现或只实现部分 简介 用wasd去吃‘*’ 头文件 #include<bi…...
LINUX 入门 4
LINUX 入门 4 day6 7 20240429 20240504 耗时:240min 课程链接地址 第4章 LINUX环境编程——实现线程池 C基础 第3节 #define里面的行不能乱空行,要换行就打\ typedef 是 C 和 C 中的一个关键字,用于为已有的数据类型定义一个新的名字。…...
Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl
本文首发于公众号:机器感知 Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl You Only Cache Once: Decoder-Decoder Architectures for Language Models We introduce a decoder-decoder architecture, YOCO, for large language models, …...
Java Collections.emptyList() 方法详解
前言 在Java开发的日常中,我们常常需要处理集合数据结构,而这其中就免不了要面对“空集合”的场景。传统的做法可能是直接返回 null,但这往往会引入空指针异常的风险,降低了代码的健壮性。幸运的是,Java为我们提供了一…...
Vue前端环境准备
vue-cli Vue-cli是Vue官方提供的脚手架,用于快速生成一个Vue项目模板 提供功能: 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境:NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs(已经安装就不用了) node-…...
代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集
系列文章目录 目录 系列文章目录动态规划:01背包理论基础①二维数组②一维数组(滚动数组) 416. 分割等和子集①回溯法(超时)②动态规划(01背包)未剪枝版剪枝版 动态规划:01背包理论基…...
故障——蓝桥杯十三届2022国赛大学B组真题
问题分析 这道题纯数学,考察贝叶斯公式 AC_Code #include <bits/stdc.h> using namespace std; typedef pair<int,double> PI; bool cmp(PI a,PI b){if(a.second!b.second)return a.second>b.second;return a.first<b.first; } int main() {i…...
SSD存储基本知识
存储技术随着时间的推移经历了显著变化,新兴的存储介质正逐步挑战已经成为行业标准的硬盘驱动器(HDD)。在众多竞争者中,固态硬盘(SSD)是最广泛采用且最有潜力占据主导地位的——它们速度快、运行安静&#…...
buuctf-misc题目练习二
ningen 打开题目后是一张图片,放进winhex里面 发现PK,PK是压缩包ZIP 文件的文件头,下一步是想办法进行分离 Foremost可以依据文件内的文件头和文件尾对一个文件进行分离,或者识别当前的文件是什么文件。比如拓展名被删除、被附加…...
Nginx rewrite项目练习
Nginx rewrite练习 1、访问ip/xcz,返回400状态码,要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …...
2024,AI手机“元年”? | 最新快讯
文 | 伯虎财经,作者 | 铁观音 2024年,小米、荣耀、vivo、一加、努比亚等品牌的AI手机新品如雨后春笋般涌现。因此,这一年也被业界广泛视为AI手机的“元年” 试想,当你轻触屏幕,你的手机不仅响应你的指令,更…...
5月9(信息差)
🌍 可再生能源发电量首次占全球电力供应的三成 🎄马斯克脑机接口公司 Neuralink 计划将 Link 功能扩展至现实世界,实现控制机械臂、轮椅等 马斯克脑机接口公司 Neuralink 计划将 Link 功能扩展至现实世界,实现控制机械臂、轮椅等…...
leetcode203-Remove Linked List Elements
题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入&…...
2024付费进群系统,源码及搭建变现视频课程(教程+源码)
自从我做资源站项目盈利稳定后,我越来越对网站类项目感兴趣了,毕竟很多网站类项目还是需要一定技术门槛的,可以过滤掉一些人,很多新人做项目就只盯着短视频,所以网站类项目也就没那么的卷。 这个付费进群系统…...
深入理解Django:中间件与信号处理的艺术
title: 深入理解Django:中间件与信号处理的艺术 date: 2024/5/9 18:41:21 updated: 2024/5/9 18:41:21 categories: 后端开发 tags: Django中间件信号异步性能缓存多语言 引言 在当今的Web开发领域,Django以其强大的功能、简洁的代码结构和高度的可扩…...
rk3588局域网推流
最近无意间看见在网上有使用MediaMtx插件配合ffmpeg在Windows来进行推流,然后在使用其他软件进行拉流显示数据图像的,既然windows都可以使用 ,我想linux应该也可以,正好手上也有一块RK3588的开发板,就测试了一下&#…...
Android虚拟机机制
目录 一、Android 虚拟机 dalvik/art(6版本后)二、Android dex、odex、oat、vdex、art区别 一、Android 虚拟机 dalvik/art(6版本后) 每个应用都在其自己的进程中运行,都有自己的虚拟机实例。ART通过执行DEX文件可在设…...
【触摸案例-手势解锁案例-按钮高亮 Objective-C语言】
一、我们来说这个self.btns,这个问题啊,为什么不用_btns, 1.我们说,在懒加载里边儿,经常是写下划线啊,_btns,为什么不写,首先啊,这个layoutSubviews:我们第一次,肯定会去执行这个layoutSubviews: 然后呢,去懒加载这个数组, 然后呢,接下来啊,走这一句话, 第一次…...
ChatPPT开启高效办公新时代,AI赋能PPT创作
目录 一、前言二、ChatPPT的几种用法1、通过在线生成2、通过插件生成演讲者模式最终成品遇到问题改进建议 三、ChatPPT其他功能 一、前言 想想以前啊,为了做个PPT,我得去网上找各种模板,有时候还得在某宝上花钱买。结果一做PPT,经…...
【C语言项目】贪吃蛇(上)
个人主页 ~ gitee仓库~ 欢迎大家来到C语言系列的最后一个篇章–贪吃蛇游戏的实现,当我们实现了贪吃蛇之后,我们的C语言就算是登堂入室了,基本会使用了,当然,想要更加熟练地使用还需要多多练习 贪吃蛇 一、目标二、需要…...
LeNet-5上手敲代码
LeNet-5 LeNet-5由Yann LeCun在1998年提出,旨在解决手写数字识别问题,被认为是卷积神经网络的开创性工作之一。该网络是第一个被广泛应用于数字图像识别的神经网络之一,也是深度学习领域的里程碑之一。 LeNet-5的整体架构: 总体…...
javaWeb入门(自用)
1. vue学习 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"https://unpkg.com/vue2"></script> </head> <body><div id"…...
web3风格的网页怎么设计?分享几个,找找感觉。
web3风格的网站是指基于区块链技术和去中心化理念的网站设计风格。这种设计风格强调开放性、透明性和用户自治,体现了Web3的核心价值观。 以下是一些常见的Web3风格网站设计元素: 去中心化标志:在网站的设计中使用去中心化的标志࿰…...
ASP.NET MVC(-)表单的提交、获取表单数据
FromCollection 方式...
[AIGC] 《MyBatis-Plus 结合 Spring Boot 的动态数据源介绍及 Demo 演示》
在现代的 Web 应用开发中,Spring Boot 已经成为了一种流行的框架选择。而 MyBatis-Plus 则为 MyBatis 框架提供了更强大的功能和便利。当它们结合使用时,动态数据源的运用变得更加简单和高效。 动态数据源的概念允许我们在运行时根据不同的条件或需求选…...
【华为OD机试C卷D卷】部门人力分配(C++/Java/Python)
【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 部门在进行需求开发时需要进行人力安排。 当前部门需要完成 N 个需求,需求用 requirements 表述,requirements[i] 表示第 i 个需求的工作量大小,单位:人月。 这部…...
毕业设计:《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》
前言 《基于 Prometheus 和 ELK 的基础平台监控系统设计与实现》,这是我在本科阶段的毕业设计,通过引入 Prometheus 和 ELK 架构实现企业对指标与日志的全方位监控。并且基于云原生,使用容器化持续集成部署的开发方式,通过 Sprin…...
docker私有仓库部署与管理
一、搭建本地公有仓库 1.1 首先下载registry镜像 docker pull registry 1.2 在daemon.json文件中添加私有镜像仓库地址并重新启动docker服务 vim /etc/docker/daemon.json 1.3 运行registry容器 docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restartal…...
2024第六届济南国际大健康产业博会将于5月27日如期开幕
由山东省城市经济学会、山东省科学养生协会主办的第六届中国(济南)国际大健康产业博览会,将于5月27-29日,在济南黄河国际会展中心盛大举办。 近年来,健康越来越受到大众的重视,在我国经济重要的转型阶段成…...
西安好的皮肤管理做团购网站/seo优化实训总结
2019独角兽企业重金招聘Python工程师标准>>> 今天在操作mysql数据库时,犯了一个大错误,执行了一个更新语句,但时条件没写全,结果在执行了几秒之后才发现这个问题,将一些不该改变的记录值改变了。1天时间全部…...
自定义wordpress导航图标/营销型网站制作建设
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼鸿蒙的厉害在于 你可能非用不可瀑布先生06-05 09:52科技达人关注华为一直在研发一套操作系统,如果不是对手打压。可能大部分人,至今都不知道这个系统的存在。如果市场稳定ÿ…...
做网站在哪儿买空间/域名停靠
arduino开发环境配置前言一、获取安装arduino二、HelloWorld工程总结前言 SP32开发环境大致有3种: 1.官方提供的Espressif-IDE 2.arduino开发环境 3.纯linux开发环境 前面用Espressif-IDE搭建了开发环境,这里搭建一个arduino的开发环境。 一、获取安装…...
做网站怎么引用字体/整站优化要多少钱
我们都知道,序列化不会自动保存static和transient变量,因此我们若要保存它们,则需要通过writeObject()和readObject()去手动读写。(01) 通过writeObject()方法,写入要保存的变量。writeObject的原始定义是在ObjectOutputStream.ja…...
知名室内设计网站/百度学术论文查重免费
标准库<cstdlib>(被包含于<iostream>中)提供两个帮助生成伪随机数的函数: 函数一:int rand(void); 从srand (seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))…...
专门做网站的公司 南阳/google安卓手机下载
目前互联网上有无数个开源的建站程序可供大家选择使用,对现在的站长来说真的是容易多了,10年前我作网站的时候,一个小聊天程序也要自己一句一句的写,看看现在的开源程序,层出不穷。太多了也就不知道选哪个好了…...