返回顶部
首页 > 资讯 > 后端开发 > Python >Python中子进程Timeout的使用
  • 654
分享到

Python中子进程Timeout的使用

中子进程Python 2023-01-31 06:01:18 654人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

   python中并没有Timeout模块,但是在程序中经常遇到需要超时控制的情况。    有两种思路去实现这种Timeout,其一是将需要做超时处理的代码块作为一个独立的子进程来处理,可将其另做一个包含main函数的.py文件。然后使

   python中并没有Timeout模块,但是在程序中经常遇到需要超时控制的情况。

   有两种思路去实现这种Timeout,其一是将需要做超时处理的代码块作为一个独立的子进程来处理,可将其另做一个包含main函数的.py文件。然后使用子进程超时限制来控制代码块运行的时间。

#!/usr/bin/Python
import signal
import select
import datetime
import subprocess
import os,sys,time
'''input: command string split list'''
def timeoutCmd(command, timeout):
    start = datetime.datetime.now()
    process = subprocess.Popen(command,stdout=subprocess.PIPE)
    while process.poll() is None:
        time.sleep(0.2)
        now = datetime.datetime.now()
        if (now - start).seconds > timeout:
            try:
                os.kill(process.pid, signal.SIGKILL)
                os.waitpid(-1, os.WNOHANG)
            except:
                pass
            return False
    return True

  以上的方法可以实现将需要运行的命令作为command参数 ,成为当前进程的子进程,控制其运行时间。当子进程和主进程需要通信的时候,则可以使用文件通信。

'''input: command string'''
def timeoutCommand(command, timeout):
    outMsg = []
    pipeFile = "timeout_%s.txt" %time.mktime(time.localtime())
    fileWriter = open(pipeFile, "w")
    cmd = command.split()
    start = datetime.datetime.now()
    process = subprocess.Popen(cmd, universal_newlines=True, stdout=fileWriter)
    while process.poll() is None:
        time.sleep(0.2)
        now = datetime.datetime.now()
        if (now - start).seconds > timeout:
            try:
                os.kill(process.pid, signal.SIGKILL)
                os.waitpid(-1, os.WNOHANG)
            except:
                pass
            break
    try:
        fileWriter.close()
        fileReaser = open(pipeFile, "r")
        outMsg = fileReaser.readlines()
        fileReaser.close()
    except:
        pass
    try:
        os.remove(pipeFile)
    except:
        pass
    return outMsg

Python程序超时的情况经常出现,将核心而且容易超时的代码块封装成一个子进程来控制是一种十分稳妥的方法。

--结束END--

本文标题: Python中子进程Timeout的使用

本文链接: https://lsjlt.com/news/190086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中子进程Timeout的使用
       Python中并没有Timeout模块,但是在程序中经常遇到需要超时控制的情况。    有两种思路去实现这种Timeout,其一是将需要做超时处理的代码块作为一个独立的子进程来处理,可将其另做一个包含main函数的.py文件。然后使...
    99+
    2023-01-31
    中子 进程 Python
  • Python中线程Timeout的使用
    Python中关于Timeout有另一种用起来更简便的方法,即使用装饰器。这种方式是使用sys模块的settrace等方法重构了python的threading类:#!/usr/bin/python import threading im...
    99+
    2023-01-31
    线程 Python Timeout
  • python中timeout使用报错怎么解决
    在Python中使用timeout时常见的错误可能是超时异常引起的,可以通过捕获异常并处理来解决。以下是一个示例代码: import...
    99+
    2024-03-11
    python
  • python中timeout的用法是什么
    timeout参数是在调用某些函数时设置一个时间限制,如果函数在指定时间内没有执行完成,就会抛出一个TimeoutError异常。这...
    99+
    2024-03-11
    python
  • 如何使用Python子进程关闭Excel自动化中的弹窗
    本篇文章为大家展示了如何使用Python子进程关闭Excel自动化中的弹窗,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。利用Python进行Excel自动化操作的过程中,尤其是涉及VBA时,可能遇到...
    99+
    2023-06-15
  • python子进程模块subproce
    属性1.Popen.poll():用于检查子进程是否已经结束。设置并返回returncode属性。2.Popen.wait():等待子进程结束。设置并返回returncode属性。3.Popen.communicate(input=None...
    99+
    2023-01-31
    模块 进程 python
  • Python的子线程和子进程是如何手动结束的?
    如何结束Python的子线程和子进程 结束子线程的方法: 这个是搬运其他大神的代码,鄙人也不知道原理,反正拿来主义,暂时没发现什么缺点,先用着再说。 import inspect...
    99+
    2024-04-02
  • Python中tqdm的使用和例子
    目录1. tqdm的介绍1.1 tqdm导入2. tqdm.tqdm()对可迭代对象进行封装2.1 语法2.2 例子2.3 带有参数的tqdm.tqdm()2.3.1 例子12.3....
    99+
    2024-04-02
  • 一文聊聊Node.js中的进程与子进程
    进程:process模块process 模块是 nodejs 提供给开发者用来和当前进程交互的工具,它的提供了很多实用的 API。【相关教程推荐:nodejs视频教程】从文档出发,管中窥豹,进一步认识和学习 process 模块:如何处理命...
    99+
    2022-11-22
    子进程 进程 Node.js
  • Node.js中的进程与子进程怎么处理
    这篇文章主要讲解了“Node.js中的进程与子进程怎么处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node.js中的进程与子进程怎么处理”吧!进程:process模块process 模...
    99+
    2023-07-04
  • 如何用 Python 子进程关闭 Excel 自动化中的弹窗
    利用Python进行Excel自动化操作的过程中,尤其是涉及VBA时,可能遇到消息框/弹窗(MsgBox)。此时需要人为响应,否则代码卡死直至超时 [^1] [^2]。根本的解决方法是VBA代码中不要出现类似弹窗,但...
    99+
    2022-06-02
    python 子进程 python 关闭excel 弹窗
  • Python多进程库multiprocessing中进程池Pool类的使用详解
    问题起因 最近要将一个文本分割成好几个topic,每个topic设计一个regressor,各regressor是相互独立的,最后汇总所有topic的regressor得到总得预测结果。没错!类似baggi...
    99+
    2022-06-04
    进程 详解 Python
  • C++中怎么使用exec()函数替换子进程的映像
    在C++中,可以使用exec()函数族来替换子进程的映像。下面是一个简单的示例代码: #include <iostream&g...
    99+
    2024-04-02
  • python中的Sobel算子如何使用
    本篇内容主要讲解“python中的Sobel算子如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python中的Sobel算子如何使用”吧!说明Sobel算子根据像素点的上下、左右相邻点的...
    99+
    2023-06-20
  • 如何使用Python中的进程间通信
    如何使用Python中的进程间通信进程间通信(IPC,Inter-Process Communication)是计算机科学中一个重要的概念,它允许不同的进程在同一个计算机系统中进行数据交换和共享资源。在Python中,有多种方式可以实现进程...
    99+
    2023-10-22
    Python 进程通信 IPC
  • 怎么在python中使用进程池
    这篇文章给大家介绍怎么在python中使用进程池,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游...
    99+
    2023-06-14
  • python守护进程监控子进程怎么实现
    在Python中,可以使用multiprocessing模块来创建子进程并监控它们。具体实现方法如下: 导入multiproces...
    99+
    2023-10-23
    python
  • python中多进程和多线程的使用方法
    这篇文章主要介绍了python中多进程和多线程的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。进程和线程进程是系统进行资源分配的最小单位,线程是系统进行调度执行的最小...
    99+
    2023-06-14
  • Node中的进程与子进程实例代码分析
    本篇内容主要讲解“Node中的进程与子进程实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node中的进程与子进程实例代码分析”吧!进程:proces...
    99+
    2024-04-02
  • 一文详解Python中多进程和进程池的使用方法
    目录一、多进程二、进程池三、使用案例总结Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多进程和进程池是其强大的功能之一,可以让我们更加高...
    99+
    2023-05-16
    Python多进程 进程池使用 Python多进程 Python进程池
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作