当前位置: 首页 > news >正文

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 异步任务

如果要进行一些非常耗时的操作(例如&#xff1a;爬虫等)&#xff0c;那么页面就会在这里卡住&#xff0c;而系统就会以为这个软件无响应&#xff0c;并提示关闭&#xff0c;可以说明用户体验极差&#xff0c;因此我们在此处引入异步操作。 在py中引入事件调节器&#xff0c;并在…...

DEV--C++小游戏(吃星星(0.1))

目录 吃星星&#xff08;0.1&#xff09; 简介 头文件 命名空间变量 副函数 清屏函数 打印地图函数 移动函数 主函数 0.1版完整代码 吃星星&#xff08;0.1&#xff09; 注&#xff1a;版本<1为未实现或只实现部分 简介 用wasd去吃‘*’ 头文件 #include<bi…...

LINUX 入门 4

LINUX 入门 4 day6 7 20240429 20240504 耗时&#xff1a;240min 课程链接地址 第4章 LINUX环境编程——实现线程池 C基础 第3节 #define里面的行不能乱空行&#xff0c;要换行就打\ typedef 是 C 和 C 中的一个关键字&#xff0c;用于为已有的数据类型定义一个新的名字。…...

Imagine Flash、StyleMamba 、FlexControl、Multi-Scene T2V、TexControl

本文首发于公众号&#xff1a;机器感知 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开发的日常中&#xff0c;我们常常需要处理集合数据结构&#xff0c;而这其中就免不了要面对“空集合”的场景。传统的做法可能是直接返回 null&#xff0c;但这往往会引入空指针异常的风险&#xff0c;降低了代码的健壮性。幸运的是&#xff0c;Java为我们提供了一…...

Vue前端环境准备

vue-cli Vue-cli是Vue官方提供的脚手架&#xff0c;用于快速生成一个Vue项目模板 提供功能&#xff1a; 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境&#xff1a;NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs&#xff08;已经安装就不用了&#xff09; node-…...

代码随想录算法训练营第四十二天| 01背包问题(二维、一维)、416.分割等和子集

系列文章目录 目录 系列文章目录动态规划&#xff1a;01背包理论基础①二维数组②一维数组&#xff08;滚动数组&#xff09; 416. 分割等和子集①回溯法&#xff08;超时&#xff09;②动态规划&#xff08;01背包&#xff09;未剪枝版剪枝版 动态规划&#xff1a;01背包理论基…...

故障——蓝桥杯十三届2022国赛大学B组真题

问题分析 这道题纯数学&#xff0c;考察贝叶斯公式 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存储基本知识

存储技术随着时间的推移经历了显著变化&#xff0c;新兴的存储介质正逐步挑战已经成为行业标准的硬盘驱动器&#xff08;HDD&#xff09;。在众多竞争者中&#xff0c;固态硬盘&#xff08;SSD&#xff09;是最广泛采用且最有潜力占据主导地位的——它们速度快、运行安静&#…...

buuctf-misc题目练习二

ningen 打开题目后是一张图片&#xff0c;放进winhex里面 发现PK&#xff0c;PK是压缩包ZIP 文件的文件头&#xff0c;下一步是想办法进行分离 Foremost可以依据文件内的文件头和文件尾对一个文件进行分离&#xff0c;或者识别当前的文件是什么文件。比如拓展名被删除、被附加…...

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用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手机“元年”? | 最新快讯

文 | 伯虎财经&#xff0c;作者 | 铁观音 2024年&#xff0c;小米、荣耀、vivo、一加、努比亚等品牌的AI手机新品如雨后春笋般涌现。因此&#xff0c;这一年也被业界广泛视为AI手机的“元年” 试想&#xff0c;当你轻触屏幕&#xff0c;你的手机不仅响应你的指令&#xff0c;更…...

5月9(信息差)

&#x1f30d; 可再生能源发电量首次占全球电力供应的三成 &#x1f384;马斯克脑机接口公司 Neuralink 计划将 Link 功能扩展至现实世界&#xff0c;实现控制机械臂、轮椅等 马斯克脑机接口公司 Neuralink 计划将 Link 功能扩展至现实世界&#xff0c;实现控制机械臂、轮椅等…...

leetcode203-Remove Linked List Elements

题目 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&…...

2024付费进群系统,源码及搭建变现视频课程(教程+源码)

自从我做资源站项目盈利稳定后&#xff0c;我越来越对网站类项目感兴趣了&#xff0c;毕竟很多网站类项目还是需要一定技术门槛的&#xff0c;可以过滤掉一些人&#xff0c;很多新人做项目就只盯着短视频&#xff0c;所以网站类项目也就没那么的卷。 这个付费进群系统&#xf…...

深入理解Django:中间件与信号处理的艺术

title: 深入理解Django&#xff1a;中间件与信号处理的艺术 date: 2024/5/9 18:41:21 updated: 2024/5/9 18:41:21 categories: 后端开发 tags: Django中间件信号异步性能缓存多语言 引言 在当今的Web开发领域&#xff0c;Django以其强大的功能、简洁的代码结构和高度的可扩…...

rk3588局域网推流

最近无意间看见在网上有使用MediaMtx插件配合ffmpeg在Windows来进行推流&#xff0c;然后在使用其他软件进行拉流显示数据图像的&#xff0c;既然windows都可以使用 &#xff0c;我想linux应该也可以&#xff0c;正好手上也有一块RK3588的开发板&#xff0c;就测试了一下&#…...

Android虚拟机机制

目录 一、Android 虚拟机 dalvik/art&#xff08;6版本后&#xff09;二、Android dex、odex、oat、vdex、art区别 一、Android 虚拟机 dalvik/art&#xff08;6版本后&#xff09; 每个应用都在其自己的进程中运行&#xff0c;都有自己的虚拟机实例。ART通过执行DEX文件可在设…...

【触摸案例-手势解锁案例-按钮高亮 Objective-C语言】

一、我们来说这个self.btns,这个问题啊,为什么不用_btns, 1.我们说,在懒加载里边儿,经常是写下划线啊,_btns,为什么不写,首先啊,这个layoutSubviews:我们第一次,肯定会去执行这个layoutSubviews: 然后呢,去懒加载这个数组, 然后呢,接下来啊,走这一句话, 第一次…...

ChatPPT开启高效办公新时代,AI赋能PPT创作

目录 一、前言二、ChatPPT的几种用法1、通过在线生成2、通过插件生成演讲者模式最终成品遇到问题改进建议 三、ChatPPT其他功能 一、前言 想想以前啊&#xff0c;为了做个PPT&#xff0c;我得去网上找各种模板&#xff0c;有时候还得在某宝上花钱买。结果一做PPT&#xff0c;经…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...