发布于 2014-11-01 16:25:34 | 634 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Python多线程编程,程序狗速度看过来!

Python编程语言

Python 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。


本文为大家讲解的是Python 下如何使用flush函数将缓冲区数据立即写磁盘的方法,感兴趣的同学参考下。

1 问题

在后台领域,经常用python做一些简单服务,实现起来速度较快、变化较灵活,相比C++,成本要低很多。作为后台服务,在观察服务运行情况时, 都希望服务能够实时输出日志数据,以便观察。之前我用python写的一个服务,发现就没有实时把数据写到磁盘,导致在观察数据时,发现实际上某个行为已 经执行成功了,但日志并未有记录。

2 原因分析及解决

示例代码:

 
#!/usr/bin/env python
# -*- coding: gbk -*-

import time

fd = open("a.txt", "a")
i = 0
while 1:

    buf = "a\n"
    fd.write(buf)
    time.sleep(1)
    i = i + 1

    if i > 10:
        break

fd.close()
 

代码的功能很简单,每一秒把“a”写入文件a.txt中。在运行中,发现在运行10秒后,文件a.txt才会真正完成数据的写入。原因是很简单,python的实现中,调用write后,只是把数据写到内核缓冲区,实际上并没有把数据写到磁盘上,只有调用close或是内核缓冲区满的情况下,数据才会写入磁盘中。

我们抽象一下来看,对于我们的服务来说,我们通常会这样写代码:

 
#!/usr/bin/env python
# -*- coding: gbk -*-

import time

i = 0
while 1:

    # 干活
    do_something()

    # 刷新缓冲区,把数据写到磁盘上,fd为打开的文件句柄,假设你在系统已经打开了
    fd.flush()
 

对于我们来说,服务每次do_something,我们都希望实时观察到输出。调用flush函数,在每次循环后,都可以把数据输出到磁盘,这样便可实时观察到日志输出。

当然,频繁使用这个函数,要考虑性能问题,系统频繁的将数据写到磁盘,是比较耗CPU的,对于服务访问量不大的情况,这样使用还是比较方便的。



最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务