(Asyncio子进程管理完全手册):构建可扩展异步系统的秘密武器

Python学习笔记(三):进程与线程 一、进程(process) 在Python中,进程的主要模块为subprocess模块,此模块旨在代替老的os.system,os.spawn*,os.popen*,popen2,commands模块,进一步减少编程人员的工作量,实现import this中体现的宗旨。附上官方文档链接:https://docs.python.org/3/library/subprocess.html 阅读详情

第一章:Asyncio子进程管理完全手册:构建可扩展异步系统的秘密武器

在现代异步Python应用中,高效管理外部进程是提升系统吞吐量的关键。`asyncio` 提供了对子进程的原生支持,允许开发者在不阻塞事件循环的前提下执行系统命令或调用外部程序。通过 `asyncio.create_subprocess_exec()` 和 `asyncio.create_subprocess_shell()`,可以异步启动进程并与其标准输入、输出和错误流进行交互。

启动异步子进程

使用 `create_subprocess_exec` 可以直接执行二进制文件,避免 shell 解析开销:
import asyncio

async def run_command():
    # 启动一个异步子进程
    proc = await asyncio.create_subprocess_exec(
        'ls', '-l',                    # 命令及其参数
        stdout=asyncio.subprocess.PIPE, # 捕获标准输出
        stderr=asyncio.subprocess.PIPE  # 捕获标准错误
    )
    stdout, stderr = await proc.communicate() # 等待完成并获取输出
    print(stdout.decode())
    return proc.returncode
该方法适用于需要精确控制执行环境的场景,如调用编译工具链或数据库迁移脚本。

并发执行多个外部任务

利用 `asyncio.gather`,可并行运行多个子进程,显著提升批处理效率:
  1. 定义多个独立的子进程协程任务
  2. 使用 `asyncio.gather` 并发调度
  3. 统一处理返回结果或异常
方法适用场景安全性
create_subprocess_exec已知可执行路径,需高性能高(无shell注入风险)
create_subprocess_shell依赖shell重定向或管道中(注意命令拼接安全)
graph TD A[主事件循环] --> B(创建子进程任务) B --> C{并发模式?} C -->|是| D[asyncio.gather] C -->|否| E[逐个await] D --> F[汇总结果] E --> F

第二章:Asyncio子进程核心机制解析

2.1 理解asyncio.create_subprocess_exec与create_subprocess_shell

在异步编程中,`asyncio` 提供了两种创建子进程的方式:`create_subprocess_exec` 与 `create_subprocess_shell`,它们分别适用于不同场景。
核心差异
  • create_subprocess_exec:直接执行指定程序,不经过 shell,安全性更高;
  • create_subprocess_shell:通过 shell 解析命令,支持管道、重定向等 shell 特性。
代码示例对比
import asyncio

# 使用 exec 直接调用程序
proc = await asyncio.create_subprocess_exec('ls', '-l')

# 使用 shell 执行复合命令
proc = await asyncio.create_subprocess_shell('ls -l | grep ".py"')
上述代码中,`create_subprocess_exec` 接收可执行文件及其参数列表,避免 shell 注入风险;而 `create_subprocess_shell` 允许完整 shell 命令字符串,灵活性更高但需谨慎处理输入。

2.2 子进程的启动流程与事件循环集成

在现代异步运行时中,子进程的启动需与事件循环紧密协作,以实现非阻塞的进程管理。通过封装操作系统调用,运行时可在不阻塞主线程的前提下完成进程创建。
启动流程解析
子进程的启动通常分为三步:准备执行环境、调用系统接口 fork/exec、注册事件监听器。事件循环负责监听子进程状态变化,如退出码、标准输出流等。

cmd := exec.Command("ls", "-l")
stdout, _ := cmd.StdoutPipe()
_ = cmd.Start()

// 将 stdout 读取注册到事件循环
go func() {
    io.Copy(logOutput, stdout)
}()
_ = cmd.Wait() // 等待结束并释放资源
上述代码展示了命令执行与管道读取的分离。Start 非阻塞启动子进程,Wait 确保资源回收。通过 goroutine 将 I/O 流绑定至事件驱动模型,实现高效集成。
事件循环集成机制
运行时将子进程的文件描述符注册到多路复用器(如 epoll),当有输出或进程终止时触发回调,避免轮询开销。

2.3 标准输入输出流的异步读写原理

在现代操作系统中,标准输入输出流(stdin/stdout)的异步读写依赖于底层I/O多路复用机制。通过非阻塞I/O与事件循环配合,程序可在等待数据时不阻塞主线程。
事件驱动模型
系统通常使用 epoll(Linux)、kqueue(BSD)等机制监控文件描述符状态变化。当输入缓冲区有数据可读或输出缓冲区可写时,触发回调函数处理读写操作。
reader := bufio.NewReader(os.Stdin)
go func() {
    for {
        line, err := reader.ReadString('\n')
        if err == nil {
            fmt.Fprint(os.Stdout, "echo: "+line)
        }
    }
}()
上述代码启动协程异步读取标准输入,避免阻塞主流程。`bufio.Reader` 提供缓冲机制,提升小数据块读取效率;`fmt.Fprint` 将结果写入标准输出流。
缓冲与同步
标准流默认启用行缓冲(line-buffered),仅当遇到换行符或缓冲区满时刷新。异步写入需注意数据竞争,应使用互斥锁保护共享资源。

2.4 进程生命周期管理与信号处理机制

操作系统通过精确的控制机制管理进程从创建到终止的整个生命周期。进程通常经历创建、就绪、运行、阻塞和终止五个状态,内核调度器负责在这些状态间进行转换。
信号的基本概念
信号是软件中断机制,用于通知进程发生特定事件,如 SIGTERM 请求终止,SIGKILL 强制结束进程。
信号处理方式
  • 默认处理:由系统定义行为,如终止、忽略或暂停
  • 忽略信号:除 SIGSTOP 和 SIGKILL 外可被忽略
  • 自定义处理:通过 signal() 或 sigaction() 注册处理函数
#include <signal.h>
#include <stdio.h>

void handler(int sig) {
    printf("Received signal: %d\n", sig);
}

signal(SIGINT, handler); // 捕获 Ctrl+C
上述代码注册了对 SIGINT 的自定义处理函数,当用户按下 Ctrl+C 时触发,输出信号编号后继续执行或退出。

2.5 资源隔离与安全性控制策略

命名空间与控制组机制
Linux 命名空间(Namespaces)和控制组(cgroups)是实现资源隔离的核心技术。命名空间为进程提供独立的视图,如网络、PID、文件系统等;cgroups 则限制资源使用,如 CPU、内存。
docker run -it --memory=200m --cpus=1.5 ubuntu:20.04
该命令启动容器时,通过 cgroups 限制其最大使用 200MB 内存和 1.5 核 CPU。参数 `--memory` 控制内存配额,`--cpus` 限制 CPU 时间片占比,防止资源争用。
安全策略强化
通过 SELinux 或 AppArmor 可定义进程访问策略,最小化攻击面。例如,AppArmor 配置如下:
  • 限制文件读写路径
  • 禁止原始套接字创建
  • 约束系统调用行为

第三章:高效子进程通信模式设计

3.1 基于管道的双向通信实战

在进程间通信(IPC)中,管道是实现数据流传输的基础机制。通过命名管道(FIFO)或匿名管道,可构建稳定的双向通信通道。
创建双向管道连接
使用系统调用 pipe() 可生成一对文件描述符,分别用于读写:

int fd[2];
if (pipe(fd) == -1) {
    perror("pipe failed");
    exit(1);
}
// fd[0] 为读端,fd[1] 为写端
该代码创建匿名管道,fd[0] 用于读取数据,fd[1] 用于写入数据。父子进程可通过 fork() 共享描述符实现通信。
数据流向控制
为实现双向通信,需建立两条管道:
  • 管道1:父进程写,子进程读
  • 管道2:子进程写,父进程读
通过合理关闭冗余描述符,避免读写端阻塞,确保数据同步可靠。

3.2 使用JSON进行结构化数据交换

JSON的基本结构与语法
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用键值对形式组织数据,支持对象({})和数组([])两种复合结构。其语法简洁,易于人阅读和机器解析。
典型应用场景示例
在Web API通信中,前端常以JSON格式向后端提交用户数据:
{
  "userId": 1001,
  "userName": "alice",
  "preferences": {
    "theme": "dark",
    "language": "zh-CN"
  },
  "active": true
}
上述代码表示一个包含用户基本信息及偏好的结构化对象。其中,preferences为嵌套对象,体现JSON支持多层结构的能力;布尔值active展示原始数据类型的灵活表达。
数据类型与兼容性
  • 支持字符串、数值、布尔、对象、数组和null
  • 不支持函数、undefined或日期对象(需转为字符串)
  • 跨语言解析能力强,几乎所有编程语言均内置JSON处理函数

3.3 非阻塞I/O与流控机制实现

非阻塞I/O的基本原理
在高并发网络编程中,非阻塞I/O通过将文件描述符设置为非阻塞模式,避免线程因等待数据而挂起。系统调用如 `read()` 或 `write()` 会立即返回,若无数据可读或缓冲区满,则返回 `EAGAIN` 或 `EWOULDBLOCK` 错误。
基于事件驱动的流控策略
结合 epoll 等多路复用机制,可在数据就绪时触发回调,实现高效 I/O 处理。以下为 Go 中非阻塞写操作的简化示例:

conn.SetWriteDeadline(time.Now().Add(5 * time.Second))
n, err := conn.Write(data)
if err != nil {
    if netErr, ok := err.(net.Error); ok && netErr.Timeout() {
        // 触发流量控制,降低发送频率
        throttleSender()
    }
}
上述代码通过设置写超时,检测发送瓶颈。当频繁出现超时时,调用 throttleSender() 降低发送速率,实现动态流控。
流控参数对比
策略响应速度实现复杂度
滑动窗口快中
令牌桶中高

第四章:高并发场景下的子进程调度实践

4.1 进程池模式与连接复用技术

在高并发系统中,频繁创建和销毁进程会带来显著的性能开销。进程池模式通过预先创建一组工作进程并重复利用,有效降低了系统资源消耗。
进程池的基本结构
进程池通常由任务队列、主控进程和多个工作进程组成。主控进程负责接收任务并分发给空闲的工作进程,实现负载均衡。
type ProcessPool struct {
    workers   []*Worker
    taskQueue chan Task
}

func (p *ProcessPool) Start() {
    for _, w := range p.workers {
        go w.Start(p.taskQueue)
    }
}
上述代码展示了进程池的核心结构:通过共享任务通道(taskQueue)将任务分发给多个 Worker,每个 Worker 持续监听通道并处理任务,避免了重复创建进程的开销。
数据库连接复用机制
连接复用技术通过维护长连接或连接池,减少TCP握手和认证延迟。典型实现如数据库连接池,支持连接的获取、释放与健康检查。
技术适用场景优势
进程池CPU密集型任务提升资源利用率
连接池I/O密集型操作降低延迟

4.2 超时控制与异常恢复机制

在分布式系统中,网络延迟和节点故障不可避免,合理的超时控制与异常恢复机制是保障服务可用性的关键。
超时控制策略
通过设置合理的超时阈值,避免请求无限等待。例如在 Go 中使用 context.WithTimeout:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
result, err := fetchData(ctx)
if err != nil {
    // 超时或其它错误处理
}
该代码设置 2 秒超时,超过则自动触发取消信号,释放资源。
异常恢复机制
采用重试与熔断结合的策略提升系统韧性。常见参数如下:
策略说明
重试次数通常设为 3 次,避免雪崩
指数退避每次重试间隔递增,缓解压力
熔断器状态开启、半开、关闭,动态切换

4.3 负载均衡与任务分发策略

负载均衡的核心机制
负载均衡通过将请求合理分配到多个服务节点,提升系统吞吐量与可用性。常见的策略包括轮询、加权轮询、最少连接数和响应时间优先等。
  • 轮询:依次将请求分发至各节点,实现简单但忽略负载差异;
  • 加权轮询:根据节点性能分配权重,提升资源利用率;
  • 最少连接:将新请求交给当前连接数最少的节点,动态适应负载变化。
基于一致性哈希的任务分发
在分布式缓存或微服务场景中,一致性哈希有效减少节点增减带来的数据迁移。
// 一致性哈希环上的节点映射
type ConsistentHash struct {
    circle map[uint32]string // 哈希环:虚拟节点到真实节点的映射
    sortedKeys []uint32      // 排序的哈希值
}

// GetNode 返回 key 对应的服务节点
func (ch *ConsistentHash) GetNode(key string) string {
    hash := crc32.ChecksumIEEE([]byte(key))
    for _, k := range ch.sortedKeys {
        if hash <= k {
            return ch.circle[k]
        }
    }
    return ch.circle[ch.sortedKeys[0]] // 环形回绕
}
该实现通过 CRC32 计算 key 的哈希值,并在排序后的虚拟节点列表中查找首个大于等于该值的位置,实现高效定位。虚拟节点的引入缓解了数据倾斜问题,提升整体均衡性。

4.4 性能监控与资源使用优化

实时性能指标采集
现代系统依赖精细化的性能监控来识别瓶颈。通过 Prometheus 采集 CPU、内存、I/O 等核心指标,可实现毫秒级响应预警。

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100'] # 采集主机资源使用数据
该配置定义了从本地 node_exporter 拉取系统指标,端口 9100 暴露标准化的监控数据,便于可视化分析。
资源优化策略
  • 限制容器资源上限,防止资源耗尽
  • 启用 JVM 堆外内存监控,避免 OOM
  • 使用连接池管理数据库访问,降低开销
优化项建议值效果
最大堆内存4GB减少 GC 频率
线程池大小核心数 × 2提升并发处理能力

第五章:总结与展望

技术演进的持续驱动
现代系统架构正加速向云原生与边缘计算融合。以 Kubernetes 为核心的编排体系已成标准,但服务网格(如 Istio)和 Serverless 框架(如 Knative)正在重塑应用部署模式。某金融企业在其交易系统中引入 WASM 模块,将风险校验逻辑嵌入边缘节点,延迟降低 40%。
代码即基础设施的实践深化

// 示例:使用 Terraform Go SDK 动态生成资源配置
package main

import (
    "github.com/hashicorp/terraform-exec/tfexec"
)

func applyInfrastructure() error {
    tf, _ := tfexec.NewTerraform("/path/to/project", "/path/to/terraform")
    return tf.Apply(context.Background()) // 自动化部署集群
}
未来挑战与应对策略
  • 多云环境下的策略一致性管理需依赖 OPA(Open Policy Agent)统一控制平面
  • AI 驱动的异常检测模型在 APM 工具中的集成成为运维智能化关键路径
  • 量子计算对现有加密体系的潜在冲击要求提前布局抗量子密码库(如 Kyber、Dilithium)
典型企业落地案例
行业技术方案成效指标
电商基于 eBPF 的网络可观测性故障定位时间从 30min 缩短至 2min
制造边缘 AI 推理 + 5G 切片传输质检准确率提升至 99.2%

架构演进路线图

传统单体 → 微服务 → 服务网格 → 函数化组件 → 自治代理(Autonomous Agents)

每阶段伴随可观测性、安全性和部署粒度的同步升级

Python3--Subprocess模块学习总结 Subprocess模块官方文档及源码学习整理 阅读详情

相关推荐

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Python 异步: 在非阻塞子进程中运行命令(19)

在后台,asyncio.subprocess.PIPE 将子进程配置为指向 StreamReader 或 StreamWriter,用于向子进程发送数据或从子进程发送数据,并且 communicate() 方法将从配置的读取器读取或写入字节。在后台,asyncio.subprocess.PIPE 将子进程配置为指向 StreamReader 或 StreamWriter,用于向子进程发送数据或从子进程发送数据,并且 communicate() 方法将从配置的读取器读取或写入字节。

冷冻工厂 2224

从STM32F411到华大HC32F460:一个真实项目移植的踩坑与填坑全记录

本文详细记录了从STM32F411移植到华大HC32F460芯片的全过程,包括开发环境搭建、时钟树配置、中断处理、外设驱动、看门狗陷阱、Flash操作和低功耗设计等关键坑点及解决方案。特别针对HC32F460的200MHz主频、双PLL架构和HSRUN模式等特性进行了深入分析,为工程师提供实用的移植指南,帮助节省大量调试时间。

weixin_33691817的博客 419

asyncio 系列二、asyncio 子进程

asyncio的子进程 官网连接:https://docs.python.org/zh-cn/3.7/library/asyncio-subprocess.html 官网例子: import asyncio async def run(cmd): proc = await asyncio.create_subprocess_shell( cmd, ...

duxin_csdn的博客 5108

STM32驱动MG996R舵机的PWM控制与闭环原理

舵机是一种典型的模拟闭环伺服系统,其核心是通过电位器反馈实现角度位置的自动校正。工作原理基于负反馈控制:目标PWM脉宽决定期望角度,电位器输出实时反馈实际角度,控制电路计算偏差并驱动电机消除误差。该机制赋予舵机强带载能力与抗干扰性,是机器人、云台、智能执行器等场景的关键执行单元。在嵌入式开发中,STM32通过定时器生成标准20ms周期、0.5–2.5ms脉宽的PWM信号,需严格遵循电气规范,并解决PA15引脚SWJ复用冲突、定时器重映射及CCR精度计算等关键问题。本文深入解析MG996R舵机控制全流程,涵盖

weixin_42600407的博客 562

从OAuth到DID:Web4.0身份验证协议的技术演进图谱

在数字身份体系从Web2.0向Web4.0跨越的进程中,身份验证协议正经历着从中心化授权到自主主权的范式转移。本文通过对比OAuth 2.0、OpenID Connect等传统方案与W3C DID、ION等去中心化协议的技术架构,揭示身份验证技术在性能、安全、隐私三大维度的代际差异。基于对GitHub、欧盟数字身份钱包等典型系统的实测数据分析,量化评估中心化授权服务器的单点故障风险与DID链上验证的吞吐量瓶颈。结合零知识证明、分布式密钥管理等前沿技术,为开发者提供面向Web4.0的渐进式身份架构迁移策略。

水务人 834

翻译《使用asyncio的一个指南》作者:Andrew Crozier

分享 Andrew Crozier 在 Python 中使用 asyncio 开发异步代码的一些经验。

主要记录了工作之余胡乱学习的知识,大部分是入门级别的内容。 主要是为了自己未来有用到时能快速上手,相当于是个备忘录。 当然,也很开心其他人可以从中找到对自己有用的信息。^_^ 1555

NC数据预处理避坑指南:从MATLAB读取到GeoTIFF导出,解决坐标翻转与值域异常

本文详细解析了NC数据预处理中的常见问题,包括MATLAB读取时的坐标翻转与GeoTIFF导出时的值域异常。通过实战案例,介绍了如何解决矩阵方向错乱、处理FillValue与scale_factor、精准移植空间参考等关键问题,帮助研究者高效完成气象数据的批量处理与GIS兼容性验证。

weixin_30788619的博客 654

python3 asyncio库学习(三)—— 协程的超时处理和取消

import asyncio import os import time from asyncio.subprocess import PIPE, STDOUT from threading import Thread from log_helper import * @asyncio.coroutine def do_task(domain, loop): print(11111111...

hello_ufo的专栏 3650

【RAG文档解析优化】复杂Excel表格处理

—从识别表格边界,到恢复内部结构,再到生成RAG友好的表示——我们可以系统性地将这些“带刺的玫瑰”驯服。虽然代码实现可能充满细节和挑战,但其带来的回报是巨大的:一个更干净、更可靠的知识库,以及一个能真正理解和利用表格数据、从而提供精准答案的RAG系统。为了人类阅读的便利性,制作者常常会使用合并单元格来创建标题、使用多层表头来组织复杂的列、在同一个Sheet页中放置多个相关的表格,并添加大量的注释说明。它们就像一朵朵“带刺的玫瑰”,虽然蕴含着宝贵的数据,但如果直接用传统的方法(如。

kakaZhui的博客 853

vue3+vite - 解决报错error while updating dependencies:Error:EACCES:permission denied,mkdir ‘x‘(系统权限问题)

vue3,vite,报错,nuxt,权限,苹果mac系统,windows系统,vue3报错,vite报错,node,详细解决方法,教程,[vite] error while updating dependencies: Error:EACCES:permission denied,mkdir 'x',更新依赖项时发生[vite]错误:错误:EACCES:权限被拒绝,mkdir,苹果mac系统加了sudo还是不行报错,运行报错,启动项目,run dev,创建项目,初始化,依旧不行怎么办,保权限没有问题,换了n

✅ 精选推荐文章 5556

深入理解 Python `asyncio` 的子进程协议(Subprocess Protocol)

本文介绍了Python asyncio模块中子进程协议(SubprocessProtocol)的高级用法。相比常规协程接口,子进程协议提供事件驱动的回调机制,支持实时处理子进程输出、细粒度控制进程生命周期。文章通过ls命令示例展示了连接建立、数据接收和进程退出的完整流程,对比分析了两种子进程交互方式的适用场景:协程API适合常规操作,而子进程协议更适用于需要高响应性的实时系统。同时指出了该机制的局限性及平台兼容性注意事项。子进程协议为构建异步任务调度器、日志监控等复杂场景提供了强大工具。

蜗牛沐雨 998

华为OD机试2025C卷 - CPU调度策略 (C++ & Python & JAVA & JS & GO)

华为OD机试 2025C卷 CPU调度策略,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1297

如何快速掌握Python异步子进程协议:asyncio.create_subprocess_exec完整指南

Python异步编程是现代应用开发的重要技能,而**asyncio.create_subprocess_exec**正是异步子进程管理的核心工具。这个强大的异步子进程协议让你能够在Python协程中高效执行外部命令,同时保持应用程序的响应性。🚀 ## 什么是asyncio.create_subprocess_exec? **asyncio.create_subprocess_exec**是P

gitblog_00616的博客 1091

基于STM32设计的智能家居控制系统(华为云)_363

本项目设计并实现了一种基于STM32的智能家居控制系统,融合了语音识别、远程控制、环境监测与安全报警等功能。系统以STM32F103C8T6单片机为核心控制器,集成ESP8266 Wi-Fi模块实现与华为云IOT物联网平台的数据交互,采用MQTT协议进行通信。用户可通过语音识别模块控制风扇、空调、窗帘、卧室灯、客厅灯和电视等家电的开关操作,同时也可通过Android手机APP或Windows电脑上位机进行远程控制。系统还具备温湿度、光照强度、烟雾浓度和火焰检测功能,当检测到异常情况时,自动触发蜂鸣器报警并向

882

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

还在用多线程?Asyncio子进程让你的Python程序提速10倍!

掌握高效并发编程,用Asyncio子进程管理轻松提升Python性能。适用于IO密集型任务与外部命令调度,通过异步创建和监控子进程,显著降低资源开销,提高执行效率。告别多线程复杂性,实现程序提速10倍的秘诀,值得收藏。

ByteShoal的博客 893

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python 异步执行测试

本文介绍了使用asyncio库实现并行执行和任务调度的机制。通过asyncio.create_subprocess_exec启动外部命令,每个命令在独立的系统进程中运行,实现真正的并行执行。主程序通过asyncio的事件循环管理子进程的启动和输出处理,实现异步非阻塞调度。任务调度规则通过asyncio.Semaphore(N)控制,最多同时启动N个子进程,动态填补完成的任务。示例代码展示了如何设置并发数为3,并验证了任务调度的行为,确保最多3个任务并行执行,其他任务在子进程完成后立即启动。测试结果直观展示了

moamao_jishuyuan的博客 526

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

避坑指南:Python异步子进程那些你可能不知道的细节(asyncio.create_subprocess实战)

本文深入探讨Python异步子进程管理中的关键细节与避坑指南,重点解析asyncio.create_subprocess_exec和create_subprocess_shell的差异、流处理技巧及进程生命周期管理。通过实战案例展示如何避免常见陷阱,提升异步子进程的效率和安全性,特别适合需要处理高并发场景的Python开发者。

weixin_29083649的博客 203

python之子进程

asyncio.create_subprocess_exec()创建子进程。asyncio.create_subprocess_shell()运行。参数来处理创建函数的特殊值。它表示将为相应的子进程流使用特殊文件。参数的特殊值,表示标准错误应当被重定向到标准输出。

Good Luck 779

第十章:使用进程、线程和协程提供并发性-asyncio:异步I/O、事件循环和并发工具-使用子进程-利用协程和流调用子进程

10.5.12.2 利用协程和流调用子进程 要使用协程直接运行一个进程,而不是通过一个Protocol子类来访问,可以调用create_subprocess_exec()并指定是否将stdout,stderr和stdin连接到管道。如果一个协程要创建子进程,那么其结果是Process实例,可以用它来管理这个子进程或者与之通信。 import asyncio import asyncio.subpr...

编程菜鸟iglesias的博客 203

python async await报错_为什么在Windows上使用async和await时没有实现错误?

我有这个代码:import osimport timeimport asyncioasync def run_command(*args):"""Example from:http://asyncio.readthedocs.io/en/latest/subprocess.html"""# Create subprocessprocess = await asyncio.create_subpro...

weixin_39542889的博客 621

python3 asyncio

一、概述 asyncio 是用来编写并发代码的库,使用async/await语法。 asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。 asyncio 往往是构建 IO 密集型和高层级结构化网络代码的最佳选择。 asyncio 提供一组高层级API 用于: 并发地运行 Python 协程并对其...

shykevin的博客 521

命令行工具的异步调用

当你在自己的 Python 程序中采用了基于事件循环的异步编程方法之后,你就会发现自己不自觉地被其牢牢吸引住,并不是说这一方法多么棒,而是因为你不得不想办法保证程序中的任意环节都不能是阻塞的! 例如当前的场景是希望从 MongoDB 中读取每一条未处理过的数据,下载并保存其中的图片信息,然后更新数据库的内容。Python 常用的 MongoDB 异步驱动是 Motor: 结合 asyncio 使...

zt772612939的博客 804

python系统命令行_Python异步调用命令行工具

当你在自己的 Python 程序中采用了基于事件循环的异步编程方法之后,你就会发现自己不自觉地被其牢牢吸引住,并不是说这一方法多么棒,而是因为你不得不想办法保证程序中的任意环节都不能是阻塞的!例如当前的场景是希望从 MongoDB 中读取每一条未处理过的数据,下载并保存其中的图片信息,然后更新数据库的内容。Python 常用的 MongoDB 异步驱动是 Motor:结合 asyncio 使用方法...

weixin_39862484的博客 259

python-subprocess模块用法

subprocess是用于启动进程,并与进程通信的模块。 ·格式 该模块定义了一个Popen类: class Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell...

polyhedronx的博客 3834

Mastering Python-Packt Publishing 2016(读书笔记)第1版(讲解3.5的coroutine、asyncio、metaclass等)

Mastering Python:Master the art of writing beautiful and powerful Python by using all of the features that Python 3.5 offers 目录 1 Get Started2 Python风格指南3 容器与集合4 FP:可读性 vs Brev

cteng的专栏 1155
上一篇: 为什么你的树状图不美观?Python可视化设计原则深度解读
下一篇: 【Python缓存优化终极指南】:揭秘内存泄漏元凶与高效性能调优策略
InstrWander
博客等级 码龄1年 117粉丝 1992原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值