You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中让进程运行1秒后终止并启动新进程?

解决进程超时终止并切换的问题

嘿,我看了你的代码,发现几个关键问题导致你想要的“1秒超时终止进程”逻辑没生效,咱们一步步来梳理和修正:

你的代码里的核心问题

  • 进程创建时的函数调用错误:你写的multiprocessing.Process(target=queen4(number, numberblocked))会直接在主进程里执行queen4函数,而不是把它作为子进程的目标函数。正确的做法是传递函数对象,再用args参数传参。
  • p.join()阻塞了主进程join()会让主进程一直等待子进程结束,所以后面的while循环根本没机会在子进程运行时执行,自然没法检测超时。
  • 时间判断后的变量拼写错误:最后一行的p_creat...明显是p_create_time的拼写失误。

修正后的代码实现

这里是调整后的代码,能实现你要的“运行1秒超时就终止进程,否则等进程自然结束”的逻辑:

import time
import multiprocessing

TIMEOUT = 1  # 设定1秒超时

def queen4(num, blocked_num):
    # 这里是你的queen4函数逻辑,比如模拟耗时操作
    time.sleep(2)  # 示例:让函数运行2秒,超过超时时间
    print("queen4执行完成")

if __name__ == "__main__":
    number = 8  # 示例参数
    numberblocked = 2  # 示例参数
    
    p_create_time = time.time()
    # 正确创建子进程:传递函数对象+参数
    p = multiprocessing.Process(target=queen4, args=(number, numberblocked))
    p.start()
    
    i = 0
    while i == 0:
        elapsed_time = time.time() - p_create_time
        if elapsed_time >= TIMEOUT:
            p.terminate()
            print("Stopped queens4.lp starting queens11.lp")
            i = 1
            # 这里可以启动你的新进程queens11
            # new_p = multiprocessing.Process(target=queens11, args=(...))
            # new_p.start()
        elif not p.is_alive():
            # 子进程自然结束了
            print("queen4自然结束")
            i = 2
        # 循环里加个小休眠,避免占用过多CPU
        time.sleep(0.01)
    
    print(f"循环结束标记:{i}")

关键改动说明

  • 正确创建子进程:用target=queen4传递函数引用,args元组传递参数,确保函数在子进程中执行。
  • 移除p.join():让主进程可以同时运行循环来检测超时和进程状态。
  • 增加小休眠:在while循环里加time.sleep(0.01),避免主进程一直空转占用CPU资源。
  • 明确超时后的操作:终止子进程后,可以直接启动你的新进程queens11

这样调整后,你的逻辑就能正常工作啦——如果queen4在1秒内没跑完,就会被强制终止,然后切换到新进程;如果它提前完成,主进程也会正常退出循环。

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

火山引擎 最新活动