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

如何让Python函数foo总运行时长不短于15分钟且不阻塞进程

实现方案

同步场景(仅阻塞当前调用线程,不影响进程内其他线程运行)

如果你的业务逻辑是同步代码,该方案仅会阻塞调用foo的单条线程,进程内其他线程可正常执行,不会阻塞整个进程:

import datetime
import time

def foo():
    now = datetime.datetime.utcnow()
    required_delay = datetime.timedelta(minutes=15)

    # 此处放置你的可变耗时业务代码,会正常执行不受影响
    # 示例:your_business_logic()

    # 计算剩余需要等待的时间
    elapsed_time = datetime.datetime.utcnow() - now
    wait_seconds = (required_delay - elapsed_time).total_seconds()
    if wait_seconds > 0:
        time.sleep(wait_seconds)
    # 函数执行到此处时总运行时长已满足不短于15分钟的要求

说明:如果业务代码实际运行时长已经超过15分钟,不会额外等待,直接返回,符合总时长不短于15分钟的要求。

异步场景(完全非阻塞,不影响进程内其他协程运行)

如果你的项目使用异步技术栈,希望等待过程中完全不阻塞进程,可以使用异步等待方案:

import datetime
import asyncio

async def foo():
    now = datetime.datetime.utcnow()
    required_delay = datetime.timedelta(minutes=15)

    # 此处放置你的异步业务代码,正常执行不受影响
    # 示例:await your_async_business_logic()

    elapsed_time = datetime.datetime.utcnow() - now
    wait_seconds = (required_delay - elapsed_time).total_seconds()
    if wait_seconds > 0:
        await asyncio.sleep(wait_seconds)
    # 函数执行到此处时总运行时长已满足不短于15分钟的要求

说明:asyncio.sleep是异步非阻塞实现,等待过程中事件循环可以正常调度其他协程任务,整个进程不会被阻塞。

内容的提问来源于stack exchange,提问作者M. Koz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:21:00