You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何仅暂停脚本指定部分逻辑而不影响其余代码运行

非阻塞式固定间隔采样实现方案

核心思路是放弃会阻塞整个线程的time.sleep(),改用时间戳判断或多线程的方式实现间隔触发,完全不影响循环内其他逻辑的运行。

方案1:单循环时间戳判断(轻量化首选)

不需要修改现有代码结构,仅需新增时间标记变量判断是否达到采样间隔,适合逻辑简单、对资源占用敏感的场景。

实现代码

import time
import numpy as np

# 初始化上一次采样的时间戳,采样间隔设为300ms
last_sample_time = 0
SAMPLE_INTERVAL = 0.3

while True:
    # 原有第一部分逻辑不受任何影响
    if condition is True:
        print(xvalues)
        time.sleep(0.3)
    
    # 第二部分间隔采样逻辑
    if another_condition is True:
        current_time = time.time()
        # 仅当距离上次采样满300ms才执行目标逻辑
        if current_time - last_sample_time >= SAMPLE_INTERVAL:
            # 此处写入生成G-code、发送给CNC、保存文件的逻辑
            np.savetxt('Xvalues.txt', xvalues)
            # 更新最后一次采样时间
            last_sample_time = current_time

方案优势

  • 无额外依赖,代码改造成本极低
  • 无全局阻塞,其余逻辑完全按原有节奏运行
  • 间隔误差仅为单次循环的耗时,绝大多数工业控制场景足够适用

方案2:多线程分离采样逻辑(高精度/复杂逻辑首选)

将间隔采样的逻辑放到独立子线程中运行,子线程内的sleep只会阻塞自身,完全不会干扰主线程的其他业务逻辑。

实现代码

import threading
import time
import numpy as np

# 共享的X坐标变量,由主线程更新、子线程读取
xvalues = None
# 线程锁,避免多线程读写共享变量时出现脏数据
x_lock = threading.Lock()

# 独立采样子线程逻辑
def sampling_task():
    global xvalues
    while True:
        # 子线程内的sleep仅阻塞当前子线程
        time.sleep(0.3)
        # 先判断触发条件是否满足
        if not another_condition:
            continue
        # 加锁读取最新的X坐标
        with x_lock:
            current_x = xvalues
        if current_x is not None:
            # 执行生成G-code、发送CNC、保存文件的逻辑
            np.savetxt('Xvalues.txt', current_x)

# 启动后台采样线程,daemon参数保证主线程退出时子线程自动关闭
threading.Thread(target=sampling_task, daemon=True).start()

# 主线程原有逻辑完全不受子线程影响
while True:
    if condition is True:
        print(xvalues)
        time.sleep(0.3)
    # 主线程更新X坐标时加锁
    with x_lock:
        xvalues = 摄像头检测返回的最新X坐标
    # 其余所有业务逻辑正常运行

注意事项

  • 所有读写共享变量xvalues的位置都要加锁,避免数据异常
  • 若采样逻辑包含IO操作(如串口发送G-code给CNC),用多线程可以完全避免IO阻塞影响主线程的摄像头检测逻辑

内容的提问来源于stack exchange,提问作者Ruggero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:24:02