`
lhq1013
  • 浏览: 88005 次
  • 性别: Icon_minigender_2
  • 来自: 丽水
社区版块
存档分类
最新评论

python2.X利用线程实现超时结束执行的功能

阅读更多

 

语言:python 2.X

 

   
def command_timeout(command, timeout = 120):
    # print "command: ", command
    logging.info(command)
#     if timeout<30:
#         timeout=30
    result = ''
    q = Queue()
    start = time.time()
    # T0-DO Why PIPE ??
    p = subprocess.Popen(command, stdout = subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True,shell = True)
    t = Thread(target=enqueue_output, args=(p.stdout, q))
    t.start()
        
    while p.poll() is None:
        time.sleep(0.1)
        now = time.time()
        if (now - start) > timeout:
            if isWindows():
                logging.info("timeout,kill %s, %s"%(str(p.pid),command))
                subprocess.call('TASKKILL /PID '+str(p.pid)+' /F')
            else:
                # p.send_signal(signal.SIGKILL)
                os.kill(p.pid, signal.SIGKILL) 
                # os.waitpid(-1, os.WNOHANG)
                p.kill()
                # p.terminate()
                pass
            break
    
    t.join(timeout=5)
    while 1:
        try: 
            line = q.get(False)
            # print "----- process ct: ", line
        except Empty:
            break
        else:
            # print "--------line: ", line
            result = result + line
            
    p.returncode = 1 if p.returncode == None else p.returncode
    # print "result: ", result
    logging.debug(result)
    return p.returncode,result

def isWindows():
    return True if sys.platform == "win32" else False

def isLinux():
    return 'linux' in sys.platform

def isDarwin():
    return 'darwin' == sys.platform

def enqueue_output(out, queue):
    for line in iter(out.readline, b''):
        queue.put(line)
    out.close()

 

分享到:
评论

相关推荐

    Python 2.x如何设置命令执行的超时时间实例

    为了实现在Python 2.x中设置命令执行的超时时间,我们可以采用多线程的方式来实现超时处理。具体来说,可以创建一个定时器线程,当定时器线程到达指定时间后,就尝试终止正在执行的进程。这样即使命令没有完成,也...

    判断Threading.start新线程是否执行完毕的实例

    在Python的多线程编程中,`threading`模块提供了创建和管理线程的功能。`Threading.start()`方法用于启动一个新的线程,而判断新线程是否执行完毕通常需要使用`Threading.Thread`的`join()`方法。在提供的实例中,...

    Python装饰器限制函数运行时间超时则退出执行

    在Python中,我们可以利用`signal`模块来实现基于信号的超时处理。`signal`模块提供了设置和处理信号的方法,可以用来监控进程并在特定条件下触发相应的操作。下面是一个使用`signal`模块来限制函数执行时间的示例:...

    pythonthread(Python多线程处理).docx

    Python的多线程功能主要通过`thread`和`threading`两个模块实现。其中`thread`模块提供了一个更底层的操作接口,而`threading`则在此基础上进行了进一步封装,提供更为高级的功能。 #### 二、使用`thread`模块进行...

    多线程知乎用户爬虫,基于python3.zip

    本项目“多线程知乎用户爬虫,基于Python3”旨在利用Python的多线程特性来实现对知乎用户数据的有效抓取。 【描述】:该爬虫项目利用Python3的requests库进行HTTP请求,获取网页内容,再通过BeautifulSoup或者lxml...

    Python实现快速多线程ping的方法

    本示例讲解了如何利用Python的多线程功能来快速地对多个IP地址进行ping操作,以检查网络连通性。这个程序使用了`pexpect`库来执行系统命令,并通过`threading`库创建线程,实现并行ping。 首先,我们导入了所需的库...

    解决python线程卡死的问题

    ### 解决Python线程卡死的问题 在进行Python开发的过程中,可能会遇到程序突然无响应的情况,这往往是由线程卡死引起的。线程卡死不仅会导致程序无法继续执行,还可能引发一系列连锁反应,比如资源泄露、服务中断等...

    SELENIUM2+自动化测试实战+基于PYTHON语言.pdf

    **Selenium2+自动化测试实战基于Python语言** ...通过学习和实践这些知识点,自动化测试人员和爬虫工程师可以利用Selenium2和Python有效地实现Web应用的自动化测试,提高工作效率,并保证软件质量。

    python使用多线程+socket实现端口扫描

    Python中的多线程和Socket库可以结合使用来实现高效的端口扫描功能。端口扫描是网络安全和系统管理员常用的工具,用于检测远程或本地主机开放的网络端口,从而了解网络服务的状态。 首先,我们来看看如何在Python中...

    Python内置库:threading(多线程操作).docx

    - 虽然`threading`模块提供了丰富的功能,但在某些场景下,如CPU密集型任务,多线程并不能充分利用多核优势,可能需要使用多进程(`multiprocessing`)来实现真正的并行计算。 - 线程的调度是由操作系统决定的,Python...

    python实现断文件点续传

    这两个文件协同工作,实现了基于Python的断点续传功能。下面我们将详细讨论这个实现过程中的关键知识点: 1. **Python基础**:首先,你需要对Python的基本语法和数据结构有深入理解,如变量、条件语句、循环、函数...

    超高速异步协程Python爬虫.zip

    2. **协程(Coroutines)**:协程是一种轻量级的并发机制,它们是用户级别的线程,可以暂停和恢复执行。在Python中,使用`async def`定义一个协程函数,而`await`关键字用于在协程内部等待另一个协程的完成。 3. **...

    Python-Python3x实现的12306自动抢票程序

    【Python3.x实现12306自动抢票程序】是一个常见的编程实践,它涉及到多个IT领域的知识,包括网络爬虫、数据解析、自动化测试、并发处理和定时任务等。以下将详细介绍这些知识点: 1. **Python编程语言**: Python3.x...

    python多线程threading.doc

    Python的多线程主要通过`threading`模块来实现,该模块提供了丰富的功能,使得在Python中编写多线程应用变得方便。`threading`模块不仅包含了低级别的`_thread`模块的所有方法,还提供了一些高级特性,如线程同步...

    计算机网络的python作业.zip

    在这个大作业中,学生可能需要利用Python来实现网络通信、数据传输、协议解析等功能。下面我们将详细探讨一些可能涉及的Python与计算机网络相关的知识点: 1. **Python基础**:首先,理解Python的基础语法是必不可...

    Python库 | pySqsListener-0.8.7-py2.py3-none-any.whl

    这个库的版本为0.8.7,兼容Python 2和Python 3,这意味着它可以在广泛使用的Python环境中运行,包括Python 2.7和Python 3.x系列。 **SQS简介** Amazon Simple Queue Service (SQS) 是AWS提供的一种无服务器、完全...

    完整版多线程支持模块.rar

    2. 线程的优点:提高资源利用率,降低程序响应时间,实现并发执行,提高程序执行效率。 3. 线程的状态:新建、就绪、运行、阻塞和结束,这些状态的转换是线程管理的重要内容。 二、线程的创建与销毁 1. 创建线程:...

    python爬虫-09-线程之间共享全局变量.ev4.rar

    Python的线程并不是真正的并行执行,而是通过GIL(全局解释器锁)实现线程间的交替执行,这进一步增加了全局变量管理的复杂性。 在Python中,如果多个线程需要共享和修改全局变量,必须采取同步机制来防止数据竞争...

    python爬虫实战,多线程爬取京东

    该项目的目标非常明确,即以京东为例,通过编写Python爬虫程序来实现以下功能: - **爬取京东商品列表页面**:获取指定类别的商品列表页面的URL,并从中抽取商品链接。 - **抓取商品详情页**:根据商品列表页面中...

Global site tag (gtag.js) - Google Analytics