语言: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()
相关推荐
我就想到了用多线程的方式, 开启一个子线程用stdin(比如python的input函数)获取用户输入, 主线程里设置线程启动和超时. 创建线程 Python中使用多线程很方便, threading.Threaded(函数, 参数表)然后thread.start就好...
join 方法:阻塞线程 , 直到该线程执行完毕 因此 ,可以对join加一个超时操作 , join([timeout]),超过设置时间,就不再阻塞线程 jion加上还有一个后果就是, 子线程和主线程绑定在一起 , 直到子线程运行完毕,...
分别用单进程和多进程的模式实现python调用arcgis模块,上传的代码执行的功能包括:单进程使用map映射机制执行、多进程池方式执行、读写arcgis的ascii栅格数据文件、窗口分析提取栅格快的边缘栅格以及调用若干arcgis...
原理:将要调用的功能函数放入子线程,通过设定子线程的阻塞时间,超时则主线程并不会等待子线程的执行。主线程退出,子线程就不存在了。 核心就是在程序中添加 join()方法,用于等待线程结束。join()的作用是,
本文实例讲述了python使用装饰器和线程限制函数执行时间的方法。分享给大家供大家参考。具体分析如下: 很多时候函数内部包含了一些不可预知的事情,比如调用其它软件,从网络抓取信息,可能某个函数会卡在某个地方...
1.资源简介:PyQt5中使用多线程模块QThread解决了PyQt5界面程序执行比较耗时操作时,程序卡顿出现的无响应以及界面输出无法实时显示的问题,采用线程池ThreadPoolExecutor解决了ping多个IP多任务耗时问题。...
python多线程并发操作数据库,会存在链接数据库超时、数据库连接丢失、数据库操作超时等问题。 解决方法:使用数据库连接池,并且每次操作都从数据库连接池获取数据库操作句柄,操作完关闭连接返回数据库连接池。 *...
python线程Barrier俗称障碍对象,也称栅栏,也叫屏障。 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = threading.Barrier(parties, action=None, timeout=None) ...
个人用python写的扫描主机端口的小程序,可用于扫描一台指定主机开放且正在监听哪些端口,请注意,在一台主机上netstat -an看到的正在listening的端口未必是开放的,还要看主机的防火墙以及路由器的防火墙的设置。...
在应用中,有时候会 依赖第三方模块执行方法,比如调用某模块的上传下载,数据库查询等操作的时候,如果出现网络问题或其他问题,可能有超时重新请求的情况; 目前的解决方案有 1. 信号量,但不支持window; 2.多...
dirfuzz 多线程网站目录穷举扫描 微博: 邮箱: 此版不再更新,请关注加强版 使用方法 python dirfuzz.py www.wooyun.org php python dirfuzz.py ... Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like
本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考。具体分析如下: python的锁可以独立提取出来 复制代码 代码如下:mutex = threading.Lock() #锁的使用 #创建锁 mutex = threading....
python NAScan.py -h 192.168.1.1-192.168.2.111 python NAScan.py -h 10.111.1.22 -p 80,7001,8080 -m 200 -t 6 python NAScan.py -h ip.ini -p port.ini -n 服务识别在server_info.ini文件中配置...
Python模块支持以给定的超时时间运行任何现有功能。 功能超时 func_timeout 这是您传递超时,要调用的函数以及所有参数的函数,并且它最多运行#timeout#秒,并且将返回/引发传递的函数否则将返回或引发的所有...
QThread是Qt的线程类中最核心的底层类。由于PyQt的的跨平台特性,QThread要隐藏所有与平台相关的代码 要使用的QThread开始一个线程,可以创建它的一个子类,然后覆盖其它QThread.run()函数 class Thread...
Sender在启动后有两个线程,一个线程是listener,负责监听ack消息,并作出对应处理; 一个线程是超时重发线程,每隔100ms对窗口中已发送的包检查一次是否超时(每个包自带一个startTime属性),负责重发超时的块。
#####使用python开发定向抓取器mini_spider.py,实现对种子链接的广度优先抓取,并把URL长相符合特定pattern的网页保存到磁盘上。程序运行:python mini_spider.py -c spider.conf#####配置文件spider.conf:[spider]...
*** 名称:SAVITHRU M LOKANATH 源文件:[savithru_server.py, savithru_client.py] 多线程启用超时启用日志文件和密码/用户名存储文件路径:/Users/savithru/Desktop/user_pass.txt 在本地机器上实现聊天系统的步骤...