- 博客(236)
- 资源 (3)
- 收藏
- 关注
原创 7 年不见
7 年不见7 年不见,博客依然在,看了之前写的(绝大多数都是抄的)有些幼稚。????唯一的信息是竟然也开始支持 markdown 了。看后续时间情况,不定期不定主题地再来写点东西。最后,感谢各位竟能对一个七年不活跃的博客不离不弃。话不多说,慢慢回报各位吧。...
2020-05-07 16:09:47
334
转载 Python日志输出——logging模块
1. logging介绍 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式。 logging模块与log4j的机制是一样的,只是具体的实现细节不同。模块提供logger
2013-06-29 19:24:46
1887
转载 使用Python的logging.config
如果使用Python写一个比较大型的程序,你一定会用上日志系统。特别是Python这样的动态语言,很多错误都只能在运行的时候才能发现,一个好的日志系统对于Python程序相当重要。最简单的解决方案当然是直接使用print输出运行信息。但是这样太简单了,没有分级功能,如果在发布的时候想去掉调试用的运行信息还得找出所有的print语句进行修改。再者,print只能输出到控制台,想要输出到文件或者通过电
2013-06-29 16:00:24
22599
1
转载 python之import模块详解
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。下面将具体介绍几种常用情况:1、主程序与模块程序在同一目录下:如下面程序结构:`-- src |-- mod1.py `-- test1.py 若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 impor
2013-04-16 13:40:45
1101
转载 svn local delete, incoming delete upon update 解决办法
svn local delete, incoming delete upon update 解决办法 # 1.In your working directory, recreate that conflicting file: $ touch foo # 2.Revert that file to the state SVN likes (that means deleted): $ sv
2013-04-14 17:36:13
3870
转载 mysql“Access denied for user 'root'@'localhost'”问题的解决
我的Ubuntu系统最近使用mysql工具时,出现错误提示:li@ubuntu:~$ mysql -uroot -pEnter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)直接使用/etc/mysql/debian.cnf文件
2013-03-30 21:28:27
918
转载 python MySQLdb安装和使用
MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb:首先要下载下载:请到官方网站http://sourceforge.net/projects/mysql-python/或者点击链接下载http://downloads.sourceforge.net/project/mysql-python/mysql-python-test/1.2.3c1/MySQ
2013-03-23 16:54:45
55541
转载 epoll模型设计海量级连接服务器
原文请参考:http://blog.sina.com.cn/s/blog_659c1e660100p5hk.html最近在参与一个海量级(20000以上)远程连接的服务器设计,由于用户要求的硬件平台仅限于Linux,因此选择了epoll模型来实现对海量客户端连接的处理。 先聊一下epoll模型的基本情况。(一般来说,非海量级客户端连接的服务器,可能用不到epoll模型。一方面是
2013-02-19 17:22:18
1025
转载 keepalive的简单应用——管理VIP的飘动
VIP的飘动可以为我们解决很多问题,以前我试过使用ifup/ifdown的方式控制网卡的up/down来实现,这种方式有个小问题,就是每次VIP飘动之后都要等上几十秒才能生效,感觉时间比较长,而且还要配合一些逻辑脚本才能很好地工作,有没有更好的方法呢?当然有,这就是本文的主角——keepalived。 安装很简单:tar zxvf keepalived-1.1.20.tar.gz
2013-02-17 10:09:01
2508
转载 非阻塞socket与epoll的ET模式结合使用注意事项
当非阻塞socket与epoll的ET模式结合使用进行编程时需要注意的事项:当客户端与服务端建立连接数据通信完成后,即服务端收到客户端的数据后,再向客户端发送数据,当发送完数据后立马断开连接。客户端epoll_wait和read的处理:while(1){ nfds = epoll_wait(epfd_rcv, events, EVENTSIZE , -1);// get
2013-02-04 17:54:27
1318
转载 Secure Coding Best Practices for Memory Allocation in C and C++
IntroductionTomes (and I'm talking of real big tomes) are available on secure coding in C and C++. They describe the details of the language, why C, C++ are so insecure and coding patterns and anti-
2013-02-04 11:25:25
802
转载 epoll的一些思考
Epoll基本介绍在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于 select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd 数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:
2013-02-01 17:46:55
914
转载 更好的内存管理-jemalloc
今年年初由于facebook而火起来的jemalloc广为人之,但殊不知,它在malloc界里面很早就出名了。Jemalloc的创始人Jason Evans也是在FreeBSD很有名的开发人员。此人就在2006年为提高低性能的malloc而写的jemalloc。Jemalloc是从2007年开始以FreeBSD标准引进来的。软件技术革新很多是FreeBSD发起的。在FreeBSD应用广泛的技术会慢
2013-02-01 10:06:06
4449
转载 core dump解析(4)
Linux系统中在应用程序运行过程中经常会遇到程序突然崩溃,提示:Segmentation fault,这是因为应用程序收到了SIGSEGV信号。这个信号提示当进程发生了无效的存储访问,当接收到这个信号时,缺省动作是:终止w/core。 终止w/core的含义是:在进程当前目录生成core文件,并将进程的内存映象复制到core文件中,core文件的默认名称就是“core”(这是Unix类系统的一个
2013-02-01 09:35:35
852
转载 core dump解析(3)-配置与调试
LinuxCore Dump 配置与调试1.core文件的生成开关和大小限制---------------------------------1)使用ulimit-c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。2)使用ulimit-cfilesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若
2013-02-01 09:34:41
835
转载 core dump解析(2)
何谓 core? 在使用半导体作为内存的材料前,人类是利用线圈当作内存的材料(发明 者为王安),线圈就叫作 core ,用线圈做的内存就叫作 core memory。如今 ,半导体工业澎勃发展,已经没有人用 core memory 了,不过,在许多情况下, 人们还是把记忆体叫作 core 。 何谓 core dump? 我们在开发(或使用
2013-02-01 09:32:41
885
转载 Core Dump解析(1)
今天调试一个程序, 用到了core dump, 但是不知道是做什么用的,查了一下,明白了些, 记于此.什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序
2013-02-01 09:31:23
895
转载 epoll使用详解(精髓)
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且
2013-01-31 15:32:10
621
转载 epoll使用
epoll的工作原理是,你如果想进行IO操作时,先向epoll查询是否可读或可写,如果处于可读或可写状态后,epoll会通过epoll_wait函数通知你,此时你再进行进一步的recv或send操作。epoll仅仅是一个异步事件的通知机制,其本身并不作任何的IO读写操作,它只负责告诉你是不是可以读或可以写了,而具体的读写操作,还要应用层自己来作。epoll仅提供这种机制也是非常好的,它保持了事
2013-01-31 15:30:37
1080
转载 Valgrind使用说明
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试,分析,或测试等。Valgrind可以检测内存泄漏和内存越界,还可以分析cache的使用等,灵活轻巧而又强大。 一 Valgrind概观Valgrind的最新版是3.2.3,该版本包含下
2013-01-31 09:43:56
643
转载 对“关于boost::condition的用法”文章的个人的分析
首先我们看只有一个reader/一个writer的情形#include #include #include #include #include int number;boost::mutex m;boost::condition not_full;boost::condition not_empty;void writer(){ w
2013-01-16 16:34:31
673
转载 Boost多线程编程
背景• 今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序; GUI应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来保证用户界面能够及时响应用户的操作。这样使用多线程的例子还有很多。• 跨平台 创建线程• 头文件 namespace
2013-01-11 17:57:31
793
转载 C++ Multithreading
Multithreading is a specialized form of multitasking and a multitasking is the feature that allows your computer to run two or more programs concurrently. In general, there are two types of multitaski
2013-01-10 16:28:48
1361
转载 fastcgi中的多线程使用
0.背景在项目中加入了等待通讯的内容,所以原来单个请求处理时间增加了。单线程处理的fcgi就会浪费CPU和用户时间,所以需要多线程来处理,减少用户排队时间。将处理用户请求的部分从单线程变为多线程,需要大概了解改动会不会影响性能。得到的结论是:多线程和单线程在执行的流程和使用方法几乎一样,所以多线程不会带来额外的负担。1.单线程的处理步骤1.1一个简单的单线程fcgi请求
2013-01-10 15:11:59
4532
转载 读者与写者同步问题
对于这个问题,简单的解决办法就是用我们前面提到的互斥锁,这样无论是读或写操作,都是排他性的,但有的时候这样会让多线程系统的并发性受到损害,例如,对于一个数据库,它是多线程共享的,那么有多个线程对其访问,如果是用互斥锁,当有多个线程要对其读取数据时,就要竞争互斥锁,只有一个线程获取,其他线程等待,直到这个线程读取完,才轮到下个线程,这是完全没有必要的,因为多个线程对其读取操作并不会让这些数据变得不安
2013-01-08 11:31:42
1307
转载 条件变量
上一点提到,互斥锁不能用于持续时间不确定的情况,对于这种情况,可以通过条件变量与互斥锁联合使用来实现。例如,一个进程中有一个全局变量a,那么它被多个线程共享,其中有一个线程是要等到a为零的时候把a++,如何实现呢?一个不正确的办法是:while(a!=0);a++;上面程序虽然能解决问题,但这是一种忙等,而不是将线程挂起等待,这样的忙等会浪费处理器资源,更麻烦的是,根据线程的调度方
2013-01-08 11:30:37
1293
转载 互斥锁
因为同个进程中的各个线程共享整个进程的地址空间,那么就必须在线程之间进行同步,例如,一个进程有两个线程,有一个全局变量,它是共享资源,那么就必须对这个共享资源(临界资源)进行保护,当一个线程在访问它时,必须是唯一的,也就是排他性的,当这个线程访问完成后才把这个资源释放。如果,当一个线程对它访问尚未完成时,第二个线程对它进行修改,那么数据就是不安全的了,无法预测其结果。互斥锁(互斥量)就是最简单
2013-01-08 11:29:54
2699
转载 无名信号量
在POSIX标准中,信号量分两种,一种是无名信号量,一种是命名信号量。无名信号量只用于线程间,命令信号量只用于进程间。信号量是属于POSIX:SEM的,不是属于POSIX:THR的,需要的文件头是无名信号量是用来保护和共享线程间的临界区和共享资源的。它比起互斥锁功能更强大,互斥锁只是用来排他性访问临界区和共享资源,当一个线程要访问临界区或共享资源时,就必须先加锁,访问完成后再解锁,也就是说,加
2013-01-08 11:26:04
3596
转载 Boost Thread学习笔记
thread自然是boost::thread库的主角,但thread类的实现总体上是比较简单的,前面已经说过,thread只是一个跨平台的线程封装库,其中按照所使用的编译选项的不同,分别决定使用Windows线程API还是pthread,或者Macintosh Carbon平台的thread实现。以下只讨论Windows,即使用BOOST_HAS_WINTHREADS的情况。thread类提供
2013-01-07 16:40:40
673
转载 什么情况下应该使用对象池(ObjectPool)
象池很多时候是很有用的模式,有时甚至是必须。但凡事过犹不及,对象池也只有在一些场景下才适合。Object pooling can offer a significant performance boost in situations where the cost of initializing a class instance is high, the rate of in
2013-01-07 09:33:26
1510
1
转载 const在函数声明中的应用-zt
1.在一个函数声明中,const 可以修饰函数的返回值,或某个参数;对于成员函数,还可以修饰是整个函数。有如下几种情况,以下会逐渐的说明用法: A& operator=(const A& a); void fun0(const A* a ); void fun1( ) const; // fun1( ) 为类
2013-01-05 16:10:46
596
转载 CGI 环境变量
SERVER_NAME CGI脚本运行时的主机名和IP地址.SERVER_SOFTWARE 你的服务器的类型如: CERN/3.0 或 NCSA/1.3.GATEWAY_INTERFACE 运行的CGI版本. 对于UNIX服务器, 这是CGI/1.1.SERVER_PROTOCOL 服务器运行的HTTP协议. 这里当是HTTP/1.0.SERVER_PORT 服
2012-12-28 16:40:40
417
转载 关于Nginx的一些优化(突破十万并发)
nginx指令中的优化(配置文件)worker_processes 8;nginx进程数,建议按照cpu数目来指定,一般为它的倍数。 worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个
2012-12-28 15:16:48
556
转载 Object Pools
Let's take a quick dip in the object pool!Wait, wait! Before you issue the command to fire, it is notcustomary to allow the condemned a few last words?First a bit of background: there's this thing
2012-12-26 18:31:09
673
转载 deb 安装卸载
deb包是debian,ubuntu等LINUX发行版的软件安装包,是类似于rpm的软件包,而非debian,ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。1.一般在此类发行版中可以直接双击安装。2.手动安装。如果您喜欢使用终端,您需要管理员权限来安装一个 .deb 文件。 打开终端后,输入: sudo dpkg -i package_file.de
2012-12-26 12:20:25
554
原创 ubuntu12 初始化包信息时遇到无法解决的问题
初始化包信息时遇到无法解决的问题。请汇报这个“update-manager”软件包的错误,并且将如下信息包含在报告中:'E:Encountered a section with no Package: header, E:Problem with MergeList /var/lib/apt/lists/cn.archive.ubuntu.com_ubuntu_dists_prec
2012-12-25 19:54:33
1102
转载 vim ctags使用方法
windows下很多人都使用source insight 编写和查看代码。linux下可以使用VIM,刚开始会觉得VIM像windows下的记事本,而如果使用得当,它并不比source insight 逊色。 在这里,我会尽我所能细致地讲清楚如何把vim变成source insight, 然而你仍然需要积极地思考,并且必须自己去摸索一些东西。 为了避免过于罗嗦,我把基础的部分放
2012-12-25 19:41:31
684
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人