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

如何实现Python函数one在后台运行的同时执行函数two

如何实现Python函数one在后台运行的同时执行函数two

嘿,我完全懂你的需求——你想让函数one在后台悄悄执行(毕竟它要睡2秒),同时让two立刻跑起来,而不是傻等one跑完才动对吧?你之前试协程没成功,大概率是没摸准异步写法的门道,我给你几个靠谱的实现方案:


方案一:用threading线程(最适合IO密集型场景)

你的场景里都是sleep等待,属于IO密集型任务,用线程是最简单高效的方式,直接把one放到子线程里跑,主线程继续执行two就行:

import time
import threading

def one(msg, a):
    time.sleep(a)
    print(msg)

def two(msg, a):
    time.sleep(a)
    print(msg)

# 创建线程对象,把one的参数传进去
thread_one = threading.Thread(target=one, args=("Hello, ", 2))
# 启动线程,one开始在后台执行
thread_one.start()

# 主线程直接执行two,不用等one
two("World!", 1)

# 如果之后需要等one执行完再做其他操作,可以加这句:
# thread_one.join()

运行后你会看到先输出World!(因为two只睡1秒),2秒后输出Hello, ,完美实现并行~


方案二:用asyncio协程(异步编程风格)

你之前试协程没成功,估计是用了普通的time.sleep(它会阻塞整个事件循环),得换成异步的asyncio.sleep,还要正确创建异步任务:

import asyncio

# 把函数改成异步函数,用async修饰
async def one(msg, a):
    await asyncio.sleep(a)  # 必须用异步sleep,不能用time.sleep!
    print(msg)

async def two(msg, a):
    await asyncio.sleep(a)
    print(msg)

async def main():
    # 创建异步任务,让one在后台运行
    task_one = asyncio.create_task(one("Hello, ", 2))
    # 执行two,这时候one已经在后台等待了
    await two("World!", 1)
    # 如果需要确保one执行完再结束程序,就await它
    await task_one

# 启动异步事件循环
asyncio.run(main())

这个方案和线程的效果一样,适合本来就用异步框架的项目,比如FastAPI、aiohttp这类。


方案三:用multiprocessing多进程(适合CPU密集型场景)

如果你的函数是CPU密集型(比如大量计算),那用多进程更合适(因为Python的GIL锁会限制线程的CPU并行),不过你的场景用这个有点大材小用,还是给你个参考:

import time
import multiprocessing

def one(msg, a):
    time.sleep(a)
    print(msg)

def two(msg, a):
    time.sleep(a)
    print(msg)

# 多进程必须加这个判断,避免子进程重复执行代码
if __name__ == "__main__":
    process_one = multiprocessing.Process(target=one, args=("Hello, ", 2))
    process_one.start()

    two("World!", 1)
    # 等待进程结束
    process_one.join()

总结一下:你的场景用线程或者协程就足够啦,多进程留着对付CPU密集的任务就行~

备注:内容来源于stack exchange,提问作者i_suckatcode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 07:35:32