Django 使用 Celery 完成异步任务或定时任务
1 介绍
Celery是一个分布式任务队列,由三个主要组件组成:Celery worker、Celery beat 和消息代理(例如 Redis 或 RabbitMQ)。这些组件一起协作,让开发者能够轻松地执行异步任务和定时任务。
Celery worker:负责接收任务请求并执行任务。当您在 Django 应用程序中调用 apply_async 方法时,任务将被发送到 Celery worker,然后由 worker 执行。
Celery beat:负责调度定时任务。它会根据定义的规则定期触发任务,并将其发送到 Celery worker 处理。
所以,对于需要运行定时任务的情况,我们需要同时启动 Celery worker 和 Celery beat 进程来确保所有任务都可以被正确地处理和执行。
如果只需要使用 Celery 来执行异步任务,那么只需启动 Celery worker 即可。但如果需要周期性地执行任务,那么需要启动 Celery beat 来帮助完成调度这些任务。
运行 worker 与 beat
celery -A proj worker --loglevel=info --detach --pidfile=worker.pid --logfile=./logs/worker.log
celery -A proj beat --loglevel=info --detach --pidfile=beat.pid --logfile=./logs/beat.log
-A proj:指定 Celery 应用程序所在的模块或包,这里假设其名为 proj。
worker 或 beat:启动的进程名称,分别对应 worker 和 beat 两种类型的 Celery 进程。
–loglevel=info:设置日志级别为 info,即只记录 info 级别及以上的日志信息。
–detach:以守护进程(daemonized)方式启动 Celery 进程,使其在后台运行。
–pidfile=worker.pid 或 --pidfile=beat.pid:将进程 ID(PID)写入指定的 PID 文件,方便后续管理和监控。
–logfile=./logs/worker.log 或 --logfile=./logs/beat.log:指定日志文件路径,所有日志信息都会输出到该文件中。
2使用
这里使用celery调用两个脚本,两个脚本位于
custom/firewallvulnsmapping.py
custom/fortinet_crawler.py
1)安装依赖
确保你安装了以下包:
#进入虚拟环境
firewallenv\Scripts\activate
python -m pip install celery redis django-celery-beat
python -m pip install celery redis django_celery_results #查看任务执行结果
2)修改 settings.py
在 settings.py 中添加Celery的配置: myproject/settings.py
##
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','firewall_app', 'django_celery_beat',# 添加Celery应用'django_celery_results',# 添加Celery结果展示应用
]# Celery Configuration Options
# 使用 Redis 作为消息代理
CELERY_BROKER_URL = 'redis://localhost:6379/0' # 或 'amqp://guest:guest@localhost:5672//' 如果使用 RabbitMQ
CELERY_RESULT_BACKEND = 'django-db'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai' # 设置时区
CELERY_ENABLE_UTC = True
# Celery Beat Settings (如果使用定时任务)
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler' # 如果希望在 Django Admin 中管理定时任务,需要安装 django-celery-beat
# 或者使用默认的本地调度器:
# CELERY_BEAT_SCHEDULER = 'celery.beat:PersistentScheduler'
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = TrueLOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'file': {'level': 'INFO','class': 'logging.FileHandler','filename': 'celery.log', # 日志文件路径},},'loggers': {'firewall_app.tasks': { # 匹配您的任务模块'handlers': ['file'],'level': 'INFO','propagate': True,},},
}
3)创建任务
在你的应用中(例如 myapp)创建 tasks.py 文件,定义一个任务:myapp/tasks.py
from django.core.management.base import BaseCommand
import logging
import time
from django.utils import timezone
from django.conf import settings
from celery import shared_tasklogger = logging.getLogger(__name__)def run_crawler_logic():print("执行爬虫任务...")# 在这里调用 FortinetCrawler 或相关爬虫函数# crawler = FortinetCrawler()# crawler.run()from firewall_app.custom.fortinet_crawler import crawl_fortinet_vulnerabilitiescrawl_fortinet_vulnerabilities()time.sleep(10) # 模拟任务执行print("爬虫任务完成.")def run_mapping_logic():print("执行漏洞映射任务...")# 在这里调用 map_vulnerabilities_for_all_firewalls 或相关函数# map_vulnerabilities_for_all_firewalls()# 推迟导入爬虫函数,避免循环引用from firewall_app.custom.firewallvulnsmapping import run_mappingrun_mapping()time.sleep(5) # 模拟任务执行print("漏洞映射任务完成.")@shared_task
def run_crawler_task():"""Celery task for running the web crawler."""# 确保 Django 环境已设置 (如果任务需要访问 Django 模型)# 如果 Celery worker 和 Django 运行在同一环境,通常不需要手动设置# 但为了保险起见,可以加上# if not django.apps.apps.ready:# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'firewall_monitor.settings')# django.setup()logger.info("漏洞爬虫任务开始执行")run_crawler_logic()logger.info("漏洞爬虫任务完成")return "漏洞爬虫任务成功执行"@shared_task
def run_firewall_mapping_task():"""Celery task for running the firewall vulnerability mapping."""# 同上,确保 Django 环境# if not django.apps.apps.ready:# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'firewall_monitor.settings')# django.setup()logger.info("防火墙漏洞映射任务开始执行")run_mapping_logic() logger.info("防火墙漏洞映射任务完成")return "防火墙漏洞映射任务成功执行"
4)创建 celery.py
在你的Django项目目录中创建一个名为 celery.py 的文件:myproject/celery.py
使用celery调用定时任务有两种方式,
(1)第一种是不需要django admin界面操作,采用命令方式设置schedule定时运行脚本实例如下:
# 创建 Celery 应用实例
# 'firewall_monitor' 应替换为您的项目名称
app = Celery('firewall_monitor')# 使用 Django settings.py 中的配置
app.config_from_object('django.conf:settings', namespace='CELERY')# 自动发现应用中的任务
# 它会自动查找每个 app 目录下的 tasks.py 文件
app.autodiscover_tasks()# 可选:定义定时任务 (Celery Beat)
app.conf.beat_schedule = {'run-crawler-every-hour': {'task': 'firewall_app.tasks.run_crawler_task', # 指向任务函数'schedule': crontab(minute=0, hour='*/1'), # 每小时执行一次# 'schedule': 3600.0, # 或者每 3600 秒执行一次},'run-mapping-every-hour': {'task': 'firewall_app.tasks.run_firewall_mapping_task', # 指向任务函数'schedule': crontab(minute=5, hour='*/1'), # 每小时的第 5 分钟执行一次# 'schedule': 3600.0, # 或者每 3600 秒执行一次},
}@app.task(bind=True)
def debug_task(self):print(f'Request: {self.request!r}')
(2)第二种,直接使用django admin中 来配置定时任务,操作如下:celery.py不需要额外配置定时任务
# 创建 Celery 应用实例
# 'firewall_monitor' 应替换为您的项目名称
app = Celery('firewall_monitor')# 使用 Django settings.py 中的配置
app.config_from_object('django.conf:settings', namespace='CELERY')# 自动发现应用中的任务
# 它会自动查找每个 app 目录下的 tasks.py 文件
app.autodiscover_tasks()@app.task(bind=True)
def debug_task(self):print(f'Request: {self.request!r}')
在django admin中配置定时任务,首先添加定时如下:
然后配置tasks
5)先启动redis
./redis-server.exe
6)启动Celery Beat
#运行 Celery Beat: 即使您在 Admin 中配置了任务,您仍然需要运行 Celery Beat 进程来读取数据库中的计划并按时发送任务给 Worker。确保使用数据库调度器启动 Beat:python -m celery -A firewall_monitor beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
6)启动Celery Worker
在终端中启动Celery Worker,使用 --loglevel=info 参数以便查看日志:
–pool=solo 参数强制 Celery 使用单线程模式,这通常可以避免 Windows 上的权限问题。
#运行 Celery Worker: 同样,您需要运行 Worker 进程来实际执行任务:python -m celery -A firewall_monitor worker --pool=solo -l info
启动后Celery Worker就可以看到日志,一旦到了定时的时间 就会执行任务,日志如下所示:
7)查看调度结果:
django admin页面中可以看到任务调用结果
8)代码中手动调用任务并查看结果
在视图中触发任务并查看结果:myapp/views.py
from django.http import JsonResponse
from .tasks import my_task
def trigger_task(request):result = my_task.delay() # 异步调用任务return JsonResponse({"task_id": result.id}) # 返回任务ID以便跟踪
- 查看任务状态和结果
要查看任务的状态和结果,可以使用任务ID。你可以在Django Shell中查询:
python manage.py shell
然后执行以下代码:
from myapp.tasks import my_task
from celery.result import AsyncResult
#替换为你的任务ID
task_id = 'your_task_id_here'
result = AsyncResult(task_id)print("Task Status:", result.status) # 查看任务状态
print("Task Result:", result.result) # 查看任务结果
- 设置定时任务
如果需要设置定时任务,可以在 tasks.py 中添加如下代码:myapp/tasks.py
from celery import shared_task
from celery import Celery
from celery.schedules import crontab
app = Celery('myproject')
@shared_task
def my_periodic_task():print("This task runs periodically!")
@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):# 每天11点50分执行sender.add_periodic_task(crontab(minute=50, hour=11), my_periodic_task.s())
项目目录如下
项目根目录/
├── manage.py # Django项目管理脚本
├── db.sqlite3 # SQLite数据库文件
├── celery.log # Celery日志文件
├── firewall_vulns_mapping.log # 防火墙漏洞映射日志
├── fortinet_crawler.log # Fortinet爬虫日志
├── 操作手册.txt # 项目操作手册
├── firewallenv/ # Python虚拟环境目录
│
├── firewall_monitor/ # Django项目主应用
│ ├── __init__.py # 包初始化文件
│ ├── asgi.py # ASGI配置
│ ├── celery.py # Celery配置和任务调度
│ ├── settings.py # Django项目设置
│ ├── urls.py # 项目URL配置
│ ├── wsgi.py # WSGI配置
│ └── .vscode/ # VS Code配置目录
│
├── firewall_app/ # 防火墙应用
│ ├── __init__.py # 包初始化文件
│ ├── admin.py # Django管理界面配置
│ ├── apps.py # 应用配置
│ ├── models.py # 数据模型定义
│ ├── tasks.py # Celery任务定义
│ ├── urls.py # 应用URL配置
│ ├── views.py # 视图函数
│ ├── migrations/ # 数据库迁移文件目录
│ ├── custom/ # 自定义脚本目录
│ │ ├── firewallvulnsmapping.py # 防火墙漏洞映射脚本
│ │ ├── fortinet_crawler.py # Fortinet漏洞爬虫脚本
│ │ └── update_official_links.py # 官方链接更新脚本
│ └── templates/ # 模板目录
│ └── firewall_app/ # 应用模板
│ ├── base.html # 基础模板
│ ├── firewall_list.html # 防火墙列表
│ ├── firewall_vulnerabilities.html # 防火墙漏洞页面
│ ├── vulnerability_detail.html # 漏洞详情页
│ └── vulnerability_list.html # 漏洞列表页
│
├── static/ # 静态文件目录
├── staticfiles/ # 收集的静态文件目录
└── logs/ # 日志目录
相关文章:
Django 使用 Celery 完成异步任务或定时任务
1 介绍 Celery是一个分布式任务队列,由三个主要组件组成:Celery worker、Celery beat 和消息代理(例如 Redis 或 RabbitMQ)。这些组件一起协作,让开发者能够轻松地执行异步任务和定时任务。 Celery worker࿱…...
Excel 自动执行全局宏
Excel 自动执行全局宏 25.04.09 步骤 1:创建个人宏工作簿(Personal.xlsb) 生成Personal.xlsb (如尚未存在): 打开Excel → 开发工具 → 录制宏 → 选择“保存到个人宏工作簿” → 停止录制。按 Alt F11 进…...
【前缀和】矩阵区域和(medium)
矩阵区域和(medium) 题⽬描述:解法:代码Java 算法代码:C 算法代码: 题⽬描述: 题⽬链接:1314. 矩阵区域和 给你⼀个 m x n 的矩阵 mat 和⼀个整数 k ,请你返回⼀个矩阵 …...
Android ViewStub显示VISIBLE与消失GONE,Kotlin
Android ViewStub显示VISIBLE与消失GONE,Kotlin import android.os.Bundle import android.util.Log import android.view.View import android.view.ViewStub import android.widget.Button import androidx.appcompat.app.AppCompatActivity import androidx.trac…...
【愚公系列】《高效使用DeepSeek》063-海关数据获取和管理
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
探索 OSPF 协议:构建高效网络的基石
文章目录 目录 文章目录 前言 一.OSPF协议概述 二.OSPF相关概念 🕤 2.1 基本思想 🕤 2.2 SPF算法 🕤 2.3 区域划分编辑 三.OSPF工作原理 编辑 🕤 3.1 DR/BDR选举 四.OSPF网络类型 🕤4.1 BMA 🕤4.2 P2P …...
深入剖析C++单例模式的八种实现演进与工程实践
深入剖析C单例模式的八种实现演进与工程实践 一、从基础到工业级:单例模式的演进图谱 1.1 基础实现的致命缺陷分析 // 初级版(非线程安全) class NaiveSingleton { public:static NaiveSingleton* getInstance() {if (!instance) {instanc…...
手游防DDoS攻击SDK接入
在手游中集成防DDoS攻击SDK是抵御流量型和应用层攻击的核心手段之一。以下从SDK选型、接入流程、防护策略优化三个维度提供完整指南,并附关键代码示例: 一、SDK选型与核心能力对比 服务商优势劣势适用场景…...
【C++进阶】关联容器:multimap类型
目录 一、multimap 基础概念与底层实现 1.1 定义与核心特性 1.2 底层数据结构 1.3 类模板定义 1.4 与其他容器的对比 二、multimap 核心操作详解 2.1 定义与初始化 2.2 插入元素 2.3 查找元素 2.4 删除元素 2.5 遍历元素 三、性能分析与适用场景 3.1 时间复杂度分…...
学习threejs,使用EffectComposer后期处理组合器(采用RenderPass、FilmPass渲染通道)
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.EffectComposer 后期…...
用Django和AJAX创建一个待办事项应用
用Django和AJAX创建一个待办事项应用 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 用Django和AJAX创建一个待办事项应用让我们创建一个简单的 Django 项目,其中包含不同类型的 A…...
【微调大模型】使用LLaMA-Factory进行监督微调 Qwen2.5
本文使用LLaMA-Factory进行监督微调 Qwen2.5。 此监督微调(SFT)脚本具有以下特点: 支持单GPU和多GPU训练;支持全参数调优,LoRA,Q-LoRA,Dora。 下面详细介绍一下该脚本的使用方法。 目录 安装…...
前端 react+ant design ,后端 springboot +mysql+redis 全栈项目零基础小白从服务器初始化开始部署上线超详细保姆级教程
哈喽小伙伴们,好久不见,我是小李,今天,来电干货,希望对大家有帮助。 去年12月底的时候心血来潮,正好赶上腾讯云在做活动,就买了一台服务器,说是后面打算上线一两个项目,体验体验云服务器究竟是怎么玩的。后来由于实习和“冬招”,实在忙不过来了,就放在文件夹吃灰了…...
[Windows] OfficeAI 助手 v0.3.20(长期免费,2025-03-18 本地支持WPS_Word联动)
OfficeAI助手,作为Microsoft Office与WPS的得力智能插件,集文档自动生成、内容精准校对与润色、公式智能推荐等多功能于一体。它凭借强大的数据分析能力,深度融入Office/WPS办公生态,一键简化复杂流程,让办公效率倍增&…...
3DGS之光栅化
光栅化(Rasterization)是计算机图形学中将连续的几何图形(如三角形、直线等)转换为离散像素的过程,最终在屏幕上形成图像。 一、光栅化的核心比喻 像画家在画布上作画 假设你是一个画家,要把一个3D立方体画…...
可发1区的超级创新思路(python 、MATLAB实现):基于SAM+Informer+2DCNN的功率预测模型
首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 目录 首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 一、模型背景与核心创新 二、模型组件详解 1. SAM时空注意力模块 原理说明 代码实…...
【Java面试系列】Spring Boot微服务架构下的分布式事务解决方案与性能优化详解 - 3-5年Java开发必备知识
【Java面试系列】Spring Boot微服务架构下的分布式事务解决方案与性能优化详解 - 3-5年Java开发必备知识 1. 引言 在当今的微服务架构中,分布式事务是一个不可避免的话题。随着业务复杂度的提升,如何保证跨服务的数据一致性成为开发者和架构师必须面对…...
【MATLAB第114期】基于MATLAB的SHAP可解释神经网络分类模型(敏感性分析方法)
【MATLAB第114期】基于MATLAB的SHAP可解释神经网络分类模型(敏感性分析方法) 引言 该文章实现了一个可解释的神经网络分类模型,使用BP神经网络(BPNN)来预测特征输出。该模型利用12个变量参数作为输入特征进行训练。为…...
WPS免费使用宏(安装VBA插件)
WPS提示要开会员才能使用宏,多次搜索发现其实可以直接安装VBA插件就行,Mark一下 插件下载地址: https://www.onlinedown.net/soft/10044362.htm ‘’’ WPS插件软件介绍 wps vba是一款wps office插件,安装wps vba 7.1就可以让of…...
让测试飞起来——DevOps中的自动化测试实践指南
让测试飞起来——DevOps中的自动化测试实践指南 近年来,DevOps理念已经成为现代软件开发和运维的“最佳拍档”。它倡导“开发”和“运维”的协作,核心目标是加速交付,同时保障软件质量。而在这一过程中,测试自动化扮演了不可替代的角色。今天,我们就一起来聊聊测试自动化…...
开源AI大模型AI智能名片S2B2C商城小程序:科技浪潮下的商业新引擎
摘要: 本文聚焦于科技迅猛发展背景下,开源AI大模型、AI智能名片与S2B2C商城小程序的融合应用。通过分析元宇宙、人工智能、区块链、5G等前沿科技带来的商业变革,阐述开源AI大模型AI智能名片S2B2C商城小程序在整合资源、优化服务、提升用户体验…...
webpack配置导致浏览器自动刷新
文章目录 关键配置 - liveReload 关键配置 - liveReload const dev_config {devtool: source-map,// watch: true,devServer: {contentBase: path.resolve(__dirname, bin),port: 8005,host:192.168.xx.xx,inline: true,hot: false,liveReload: false //关键这一行【false不会…...
OPEX baota 2024.02.26
OPEX baota 2024.02.26 运维集成软件宝塔2024.02.26作废例子: 最重要的两个地方:上传文件 网站,重启应用服务器(tomcat) 其他很少用的...
【Pandas】pandas DataFrame to_numpy
Pandas2.2 DataFrame Conversion 方法描述DataFrame.astype(dtype[, copy, errors])用于将 DataFrame 中的数据转换为指定的数据类型DataFrame.convert_dtypes([infer_objects, …])用于将 DataFrame 中的数据类型转换为更合适的类型DataFrame.infer_objects([copy])用于尝试…...
Tensorflow2实现: LSTM-火灾温度预测
- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/rnFa-IeY93EpjVu0yzzjkw) 中的学习记录博客** - **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 一:理论知识基础 1.LSTM原理 一句话介…...
【降尺度】AI+CMIP6数据分析与可视化、降尺度技术与气候变化的区域影响、极端气候分析
气候变化已成为全球性挑战,对农业、生态系统、水资源、人类健康和社会经济系统产生深远影响。科学研究表明,自工业革命以来,人类活动导致的温室气体排放与全球气温上升、极端天气事件增加、冰川融化和海平面上升等现象密切相关。为科学理解和…...
粒子系统优化完成
按计划对幻世(OurDream)2D图形引擎的粒子系统进行了加强和优化,重点强化了粒子运动的控制和颜色混合效果的功能,目前优化过后的粒子系统的整体效果是令人满意的。...
spark-core编程
RDD转换算子 RDD 的两种算子:转换算子和行动算子。 RDD 根据数据处理方式的不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value 类型。 算子实际上是一些函数,用于数据处理。 Value类型 map 将处理的数据逐条进行映射转换,…...
智慧班牌系统解决方案,SaaS智慧电子班牌云平台
智慧班牌系统解决方案 系统概述 智慧班牌是智慧校园建设不断发展的产物,是教育信息化改革的载体。通过智慧班牌可以高效便捷传递各种知识信息和通知信息、及时反馈课堂信息、实现班级的透明化管理。智慧班牌将学生平安考勤、异常出勤情况及时反馈至家长、老师&…...
Flutter 2025 Roadmap
2025 这个路线图是有抱负的。它主要代表了我们这些在谷歌工作的人收集的内容。到目前为止,非Google贡献者的数量超过了谷歌雇佣的贡献者,所以这并不是一个详尽的列表,列出了我们希望今年Flutter能够出现的所有令人兴奋的新事物!在…...
【开发工具】科研开发中的主流AI工具整理及如何使用GPT润色英文论文
一、主流AI工具 AI技术发展至今已经逐渐成熟,并可以取代一部分科研和开发中的简单工作,并为复杂工作提高辅助,除此之外也是更高级的信息检索工具。熟练掌握 AI 工具在当前市场理应具有竞争优势,目前笔者在科研和开发中接触过AI工…...
用excel做九乘九乘法表
公式: IF($A2>B 1 , 1, 1,A2 & “" & B$1 & “” & $A2B$1,”")...
nacos配置达梦数据库驱动源代码步骤
1.在父工程pom.xml添加依赖: <dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.1.193</version> </dependency> 2.在nacos-config模块pom.xml添加依赖࿱…...
Spring Boot 线程池配置详解
Spring Boot 线程池配置详解 一、核心配置参数及作用 基础参数核心线程数 (corePoolSize) 作用:线程池中始终保持存活的线程数量,即使空闲也不回收。 建议:根据任务类型设定(如 I/O 密集型任务可设为 CPU 核心数 2)。 最大线程数 (maxPoolSize) 作用:…...
如何使用 qrcode.react生成二维码
qrcode.react(查看官网) 是一个用于 React 应用的 QR 码生成组件。下面是如何使用它的详细指南: 1、安装 npm install qrcode.react # 或者 yarn add qrcode.react2、基本用法 import {QRCodeSVG} from qrcode.react;const myPage () >…...
用VScode来编写前后端——构建基础框架
前言 我写这一个板块的原因是我参加了我们学校的新生项目课,需要创立一个系统,我们小组选的标题的基于计算机视觉的商品识别系统,那么我们需要一个网站来展示我们的功能,故写这些来记录一下自己,大家如果有什么问题的话…...
23.OpenCV轮廓逼近与拟合
OpenCV轮廓逼近与拟合 在计算机视觉中,轮廓是图像中边界或形状的重要表达形式。然而,直接从图像中提取的轮廓常常包含大量冗余点,且噪声较多。为了更好地描述图像中的形状,我们通常需要对轮廓进行逼近和拟合,从而降低…...
Flutter Row / Column 组件详解
1. 引言 在 Flutter 中,Row 和 Column 是最常用的布局组件,用于在水平方向 (Row) 或垂直方向 (Column) 排列子组件。它们提供了强大的对齐方式、空间分配策略,适用于各种 UI 设计需求。本文将详细介绍它们的基本用法、主要属性及自定义样式。…...
WHAT - 表单场景 - 依赖联动
目录 示例场景技术栈示例代码功能点总结详情场景 - 依赖联动初始化示例说明:详情页场景(含回显、联动)修改点说明示例代码(详情页)总结一下关键点 下面是一个基于 React TypeScript Ant Design (antd) 的表单联动示例…...
SecProxy - 自动化安全协同平台
本人为甲方安全人员,从事甲方工作近6年;针对在甲方平时安全工作的一些重复、复杂、难点的工作,思考如何通过AI、脚本、或者工具实现智能且自动化,于是花平时空闲时间准备将这些能力全部集中到一个平台,于是有了这个东西…...
网络3 子网掩码 划分ip地址
1.根据子网掩码判断主机数 IP地址网络位主机位 核心:将主机位划分为子网位和主机位 疑问:子网位有什么作用 子网掩码:网络位全为1,主机位全为0 主机数2^主机位 -2 2.根据主机和子网判断子网掩码 有一个B类网络145.38.0.0需要划…...
电容详解:定义、作用、分类与使用要点
一、电容的基本定义 电容(Capacitor) 是由两个导体极板(正负极)和中间绝缘介质组成的储能元件,其基本特性为存储电荷。 公式: C Q / V C:电容值(单位:法拉F)…...
Sublime Text for Mac v4.0 【注册汉化版】代码编辑器
Sublime Text for Mac v4.0 【注册汉化版】代码编辑器 一、介绍 sublime text for Mac一款轻量级的文本编辑器,拥有丰富的功能和插件。它支持多种编程语言,包括C、Java、Python、Ruby等,可以帮助程序员快速编写代码。Sublime Text的界面简洁…...
OpenCV 进阶实战与技巧——图像处理的全面解析
在上篇文章中,我们一起迈入了 Python OpenCV 的奇妙世界,学习了图像的读取、显示和保存等基本操作:用Python和OpenCV开启图像处理魔法之旅-CSDN博客。今天,我们将继续深入,探索图像的各种变换、滤波、边缘检测以及更深…...
单细胞转录组-生物标志物篇 | 从异质性描绘到筛查应用
宫颈癌(Cervical cancer, CC)是一种常见的妇科恶性肿瘤。尽管目前的筛查方法已被证明有效并显著降低了CC的发病率和死亡率,但仍然存在缺陷。单细胞RNA测序可以在单细胞分辨率下鉴定复杂和稀有的细胞群。通过scRNA-seq,已经绘制和描…...
MQTT:深入剖析 paho.mqtt.embedded - c - master 目录结构
引言 在嵌入式开发领域,消息队列遥测传输(MQTT)协议因其轻量级、低带宽消耗等特性被广泛应用。Eclipse Paho 项目提供了多种语言的 MQTT 客户端实现,其中paho.mqtt.embedded - c - master是针对 C 语言在嵌入式环境下的 MQTT 客户…...
minio命令行客户端mc常见用法
安装minio命令行客户端mc https://min-io.cn/docs/minio/linux/reference/minio-mc-admin.html # Windows安装minio命令行客户端 choco install minio-client -y# Linux安装mc客户端 wget -c -P /usr/local/bin/ https://dl.min.io/client/mc/release/linux-amd64/mc # 赋予可…...
Mac提示无法打开应用程序DBeaver
问题:安装好后,打开DBeaver时候提示“无法打开应用程序DBeaver” (1)首先,进入到/Applications/DBeaver.app/Contents/MacOS目录查看可执行程序的权限是否为-rwxr-xr-x,如果不是执行chmod x DBeaver的命令 …...
Dart逆向之函数调用
我们从Blutter恢复的部分IL中可以看到Dart调用函数的逻辑 // 0x180490: r16 <int> // 0x180490: ldr x16, [PP, #0x8a0] ; [pp0x8a0] TypeArguments: <int> // 0x180494: r30 Instance_MethodChannel // 0x180494: ldr lr, [P…...
Word / WPS 页面顶部标题 段前间距 失效 / 不起作用 / 不显示,标题紧贴页眉 问题及解决
问题描述: 在 Word 或者 WPS 里面,如果不是新的一节,而是位于新的一页首行时,不管怎么设置段前间距,始终是失效的,实际段前间距一直是零。 解决方案: 查询了很多方案均无法解决问题ÿ…...