- 浏览: 2600059 次
- 来自: 杭州
文章分类
- 全部博客 (1190)
- webwork (4)
- 网摘 (18)
- java (104)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (15)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (8)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
Aqu415:
,默认是netty还是hassion?
dubbo入门 -
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介
在《从nginx日志读取URL来做性能测试》(http://san-yun.iteye.com/blog/1679215)这篇文章中我实现了一个python多线程来做性能测试,但存在一个问题,线程不可中断,包括两方面:
1. 用户通过kill命令来中断
2. 程序满足某种条件中断(比如测试量大于1000则退出)
下面是我的实现:
客户端使用:
在实现的时候比较纠结的点:
1. Task如果不是daemon会导致任务永远不会停止,但是如果Task是daemon线程,main线程结束之后daemon就结束了。所以这时需要实现一个join()来阻塞main线程:
2. 线程应该可cancel的,之前是直接修改while isrunning的变量,但这样会导致task其实还没有完成的停止下来。所以对于task我引入两个变量来实现安全的停止。
3.对于signal专门写了一片文章记录()
1. 用户通过kill命令来中断
2. 程序满足某种条件中断(比如测试量大于1000则退出)
下面是我的实现:
# -*- coding: utf-8 -*- import re import urllib2 import json import threading import Queue import os import time from time import sleep from threading import Lock from signal import signal,SIGTERM,SIGINT,SIGQUIT class Executor: def __init__(self,size): self.queue = Queue.Queue() self.tasks = [] self.running = True for i in range(size): t = Task(self.queue) t.setDaemon(True) t.start() self.tasks.append(t) self._signal() def _signal(self): signal(SIGTERM,self._exit) signal(SIGINT,self._exit) signal(SIGQUIT,self._exit) def _exit(self,a=None,b=None): print 'clean' self.cancel() def cancel(self): for task in self.tasks: while not task.cancel(): pass self.running = False self.onCancel() def submit(self,call): self.queue.put(call) def join(self): #self.queue.join() queue.join()会阻塞,所以不用 while self.running and not self.queue.empty(): sleep(0.1) if self.cancelTrigger(): self.cancel() def setCancelTrigger(self,cancelTrigger): self.cancelTrigger = cancelTrigger def setOnCancel(self,onCancel): self.onCancel = onCancel class Task(threading.Thread): def __init__(self,queue): threading.Thread.__init__(self) self.queue = queue self.running = True self.canceled = False def cancel(self): self.canceled=True return self.isCanceled() def isCanceled(self): return self.running==False def run(self): while self.running: call = self.queue.get() call.run() self.queue.task_done() if self.canceled: self.running = False
客户端使用:
host = "http://7.s.duitang.com" thread_count = 10 #并发数 max_count=100 #运行次数 total = 0 fail = 0 avg = 0 lock = Lock() def cancelTrigger(): return total>=max_count def onCancel(): print 'total %s'%total print 'fail %s'%fail print 'avg %s'%(avg/total) if __name__ == "__main__": f = open("napi","r") executor = Executor(thread_count) executor.setCancelTrigger(cancelTrigger) executor.setOnCancel(onCancel) analysis(f.readlines(),executor) executor.join()
在实现的时候比较纠结的点:
1. Task如果不是daemon会导致任务永远不会停止,但是如果Task是daemon线程,main线程结束之后daemon就结束了。所以这时需要实现一个join()来阻塞main线程:
def join(self): #self.queue.join() queue.join()会阻塞,所以不用 while self.running and not self.queue.empty(): sleep(0.1) if self.cancelTrigger(): self.cancel()
2. 线程应该可cancel的,之前是直接修改while isrunning的变量,但这样会导致task其实还没有完成的停止下来。所以对于task我引入两个变量来实现安全的停止。
def cancel(self): for task in self.tasks: while not task.cancel(): pass self.running = False self.onCancel() def cancel(self): self.canceled=True return self.isCanceled() def run(self): while self.running: call = self.queue.get() call.run() self.queue.task_done() if self.canceled: self.running = False
3.对于signal专门写了一片文章记录()
发表评论
-
python读取图片exif信息
2014-11-06 10:53 2351f = open("/home/admin/tlo ... -
Python程序的执行原理
2014-04-14 15:44 16761. 过程概述 Python先把代码(.py文件)编译成字 ... -
如何创建一个短链服务
2013-12-26 16:23 0参考: http://stackoverflow.com ... -
python 解析命令参数(argument)组件argparse
2013-12-11 17:35 1340参考: http://youngsterxyf.githu ... -
pyhon命令行工具optparse
2013-11-10 16:27 959使用python optparse 可以创建命令行工具,下面 ... -
Python在豆瓣的应用
2013-10-21 10:46 1163Python在豆瓣的应用,hongqiangning分享 ... -
用python爬虫抓站的一些技巧总结
2013-10-10 14:12 1648学用python也有3个多月了,用得最多的还是各类爬虫 ... -
python小技巧
2013-10-10 11:50 6821. 声明长度256的数组 a=[0]*256 ... -
使用tesseract-ocr破解网站验证码
2013-10-09 10:25 1185原文:使用tesseract-ocr破解网站验证码 ... -
和豆瓣CMGS交流
2013-06-20 17:36 5798蒋云鹏: 在?CMGS: 在蒋 ... -
python乱码问题('ascii' codec can't encode character u'\u4e2d' in position 0)
2013-05-20 19:03 4182>>> k = u'中' >> ... -
python shell 交互模式
2013-04-28 22:17 1564python 通过code模块可以很容易的进入交互模式: ... -
jython和gunicorn性能测试对比
2013-04-13 13:03 1221helloworld,笔记本上: gunicorn ... -
python的mysql客户端-MySQLdb
2013-04-04 10:13 1081平时的主要编程语言是Java,开发时也主要用Mysql,经常 ... -
Python几种并发实现方案的性能比较
2013-03-18 21:14 2889原文:http://www.elias.cn/P ... -
python汉字和Unicode码(utf-8)之间的转换(Pack/Unpack)
2013-03-18 21:13 1593保证你要转换的字符串编码为UTF8,如果不是,请iconv ... -
python反序列化的坑
2013-01-06 18:06 1224今天遇到python一个坑,调用memcached的get_m ... -
sqlalchemy connection pool.py 源代码
2012-12-29 22:58 2148把 sqlalchemy pool源代码copy下来,有空看看 ... -
SQLAlchemy简单介绍
2012-12-28 22:41 0文档参考:http://docs.sqlalchemy.org ... -
pymysql简单使用
2012-12-28 12:38 2068import pymysql conn = pymysq ...
相关推荐
linux的中断线程化实现[借鉴].pdf
多线程机制,你懂得。。多多多多多下载,谢谢支持,办板报的了,歇息一下
数据库GreenDao+Retrofit实现断点下载多线程,可暂停,继续
JAVA100例之实例66 实现对线程的控制,中断、挂起、恢复、停止
之前在使用Java实现熔断降级组件的时候,需要实现接口请求的超时中断,通过查找相关资料了解了相关的方法,下面这篇文章主要给大家介绍了关于Java中实现线程的超时中断的相关资料,需要的朋友可以参考下
带有stop_token helper-的加入和协作可中断线程(std :: jthread)的C ++类 参考实施 测试套件 提出用于C ++标准的论文 主要建议) (有关停止回调的初始建议,已与p0660r7合并) 其他次要更新) 主要作者:...
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法...在Java中,可以使用Thread类的interrupt()方法实现线程的中断。(run方法执行完毕)
ISR的实现在OAL(OEM适配层)中,它只处理最低级的中断响应,通常是获取IRQ和SYSINTR并设置MCU内部的中断控制寄存器。中断处理的主要部分在驱动或者应用的中断处理线程中。中断处理线程与其他普通线程一样,使用同一...
使用turbo c提供interrupt关键,在每次时间片中断函数时保存现场的功能实现函数之间的切换;加上TCB管理的结构体,实现线程调度。 物理文件的存储结构 引导块区 FAT区 i节点区 数据区 实现的命令集 命令名称 使用...
线程中断 静态方法(有关同步的细节) 总结 第五章 Java线程编程的例子 数据结构和容器 简单的同步例子 一个网络服务器类 AsyncInputStream类 使用TCPServer和AsynclnputStream 总结 第六章 Java线程调度 线程...
要制作的进度条,可以显示进度,还可以进行中断操作,还要是模态对话框下面的,也就是在处理一个数据的时候(进度条在更新),不允许切换到程序窗口。
interrupt 方法:中断线程的执行。 synchronized 关键字:用于实现线程的同步,确保多个线程之间的安全访问共享资源。 Lock 接口和 ReentrantLock 类:提供更灵活的线程同步机制。 Executor 框架和线程池:用于管理...
lock和Monitor是.NET用一个特殊结构实现的,Monitor对象是完全托管的、完全可移植的,并且在操作系统资源要求方 面可能更为有效,同步速度较快,但不能跨进程同步。lock(Monitor.Enter和Monitor.Exit方法的封装)...
实现中断方式获取游戏手柄参数 1:创建线程,wait事件并处理。调用EventInputStateStart设置事件处理回调函数;isEvent设置为真。 2:在函数g_pJoystick->EnumObjects( EnumObjectsCallback, ( VOID* )hDlg, DIDFT_...
解决线程的死掉问题和超时问题特别好使,在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在java.util.concurrent...
本毕业设计题目旨在研究和实现一个基于Java多线程与线程安全机制的断点续传下载工具。随着互联网的普及,文件的下载需求日益增加,而大文件的下载往往需要较长的时间,一旦出现网络中断或意外情况,就需要从头开始...
multithread.js, 在浏览器多线程中轻松实现 多线程在浏览器多线程中轻松实现。在不中断用户体验的情况下运行任何业务逻辑。多线程是一个简单的包装器,它消除了处理网络工作者和可以传递对象的麻烦。在不中断用户...
python多线程,断点续传下载程序,功能比较简单,可以进行二次开发。实现更好用的 功能。
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程和线程安全,以及如何基于Http协议实现断点续传功能。该项目提供了一个完整的源代码包,可以作为学习...
原子操作是指不可被中断的操作,要么全部执行成功,要么全部不执行。原子操作在并发编程中具有重要的作用,可以保证多个线程对同一个变量的操作是线程安全的。 在两个线程之间共享数据,可以通过以下几种方式实现: