语言: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的多线程编程中,`threading`模块提供了创建和管理线程的功能。`Threading.start()`方法用于启动一个新的线程,而判断新线程是否执行完毕通常需要使用`Threading.Thread`的`join()`方法。在提供的实例中,...
在Python中,我们可以利用`signal`模块来实现基于信号的超时处理。`signal`模块提供了设置和处理信号的方法,可以用来监控进程并在特定条件下触发相应的操作。下面是一个使用`signal`模块来限制函数执行时间的示例:...
Python的多线程功能主要通过`thread`和`threading`两个模块实现。其中`thread`模块提供了一个更底层的操作接口,而`threading`则在此基础上进行了进一步封装,提供更为高级的功能。 #### 二、使用`thread`模块进行...
本项目“多线程知乎用户爬虫,基于Python3”旨在利用Python的多线程特性来实现对知乎用户数据的有效抓取。 【描述】:该爬虫项目利用Python3的requests库进行HTTP请求,获取网页内容,再通过BeautifulSoup或者lxml...
本示例讲解了如何利用Python的多线程功能来快速地对多个IP地址进行ping操作,以检查网络连通性。这个程序使用了`pexpect`库来执行系统命令,并通过`threading`库创建线程,实现并行ping。 首先,我们导入了所需的库...
### 解决Python线程卡死的问题 在进行Python开发的过程中,可能会遇到程序突然无响应的情况,这往往是由线程卡死引起的。线程卡死不仅会导致程序无法继续执行,还可能引发一系列连锁反应,比如资源泄露、服务中断等...
**Selenium2+自动化测试实战基于Python语言** ...通过学习和实践这些知识点,自动化测试人员和爬虫工程师可以利用Selenium2和Python有效地实现Web应用的自动化测试,提高工作效率,并保证软件质量。
Python中的多线程和Socket库可以结合使用来实现高效的端口扫描功能。端口扫描是网络安全和系统管理员常用的工具,用于检测远程或本地主机开放的网络端口,从而了解网络服务的状态。 首先,我们来看看如何在Python中...
- 虽然`threading`模块提供了丰富的功能,但在某些场景下,如CPU密集型任务,多线程并不能充分利用多核优势,可能需要使用多进程(`multiprocessing`)来实现真正的并行计算。 - 线程的调度是由操作系统决定的,Python...
这两个文件协同工作,实现了基于Python的断点续传功能。下面我们将详细讨论这个实现过程中的关键知识点: 1. **Python基础**:首先,你需要对Python的基本语法和数据结构有深入理解,如变量、条件语句、循环、函数...
2. **协程(Coroutines)**:协程是一种轻量级的并发机制,它们是用户级别的线程,可以暂停和恢复执行。在Python中,使用`async def`定义一个协程函数,而`await`关键字用于在协程内部等待另一个协程的完成。 3. **...
【Python3.x实现12306自动抢票程序】是一个常见的编程实践,它涉及到多个IT领域的知识,包括网络爬虫、数据解析、自动化测试、并发处理和定时任务等。以下将详细介绍这些知识点: 1. **Python编程语言**: Python3.x...
Python的多线程主要通过`threading`模块来实现,该模块提供了丰富的功能,使得在Python中编写多线程应用变得方便。`threading`模块不仅包含了低级别的`_thread`模块的所有方法,还提供了一些高级特性,如线程同步...
在这个大作业中,学生可能需要利用Python来实现网络通信、数据传输、协议解析等功能。下面我们将详细探讨一些可能涉及的Python与计算机网络相关的知识点: 1. **Python基础**:首先,理解Python的基础语法是必不可...
这个库的版本为0.8.7,兼容Python 2和Python 3,这意味着它可以在广泛使用的Python环境中运行,包括Python 2.7和Python 3.x系列。 **SQS简介** Amazon Simple Queue Service (SQS) 是AWS提供的一种无服务器、完全...
2. 线程的优点:提高资源利用率,降低程序响应时间,实现并发执行,提高程序执行效率。 3. 线程的状态:新建、就绪、运行、阻塞和结束,这些状态的转换是线程管理的重要内容。 二、线程的创建与销毁 1. 创建线程:...
Python的线程并不是真正的并行执行,而是通过GIL(全局解释器锁)实现线程间的交替执行,这进一步增加了全局变量管理的复杂性。 在Python中,如果多个线程需要共享和修改全局变量,必须采取同步机制来防止数据竞争...
该项目的目标非常明确,即以京东为例,通过编写Python爬虫程序来实现以下功能: - **爬取京东商品列表页面**:获取指定类别的商品列表页面的URL,并从中抽取商品链接。 - **抓取商品详情页**:根据商品列表页面中...