python 编程实例

1.python编程实例

实现目的

  • 使用多线程写入文件;
  • 使用多线程锁保护共享的数据,同一时间只能有一个线程来修改共享的数据;
  • 判断文件是否存在,不存在文件的话,创建文件开始写入,存在的话增加数据;
  • 重写write方法,保证print数据写入文件,print默认调用的是sys.stdout.write();

编程代码:

import codecs
import sys
import time
from threading import Thread, Lock
import os


class TraceLog(Thread):
    def __init__(self, logName):
        super(TraceLog, self).__init__()
        self.logName = logName
        self.lock = Lock()
        self.contexts = []
        self.isFile()

    def isFile(self):
        if not os.path.exists(self.logName):
            with codecs.open(self.logName, 'w') as f:
                f.write("this log name is: {0}\n".format(self.logName))
                f.write("start log\n")

    def write(self, context):
        self.contexts.append(context)

    def run(self):
        while 1:
            self.lock.acquire()
            if len(self.contexts) != 0:
                with codecs.open(self.logName, "a") as f:
                    for context in self.contexts:
                        f.write(context)
                del self.contexts[:]#注意不能忘记清空
            self.lock.release()


class Server(object):
    def printLog(self):
        print("start server\n")
        for i in range(10):
            print(i)
            time.sleep(0.1)
        print("end server\n")



if __name__ == '__main__':
    traceLog = TraceLog("main.log")
    traceLog.start()
    sys.stdout = traceLog
    sys.stderr = traceLog
    server = Server()
    server.printLog()
    print('yes')

执行结果为:

python 编程实例_第1张图片

这个程序巧妙的将traceLog方法重定向到sys.stdout,然后每次print的时候会调用sys.stdout.write()就直接调用了traceLog().write()方法啦,从而将print的所有数据写入指定文件。


2.任务调度利器:Celery

Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery。

 Celery有以下优点:

  • 简单:一单熟悉了celery的工作流程后,配置和使用还是比较简单的
  • 高可用:当任务执行失败或执行过程中发生连接中断,celery 会自动尝试重新执行任务
  • 快速:一个单进程的celery每分钟可处理上百万个任务
  • 灵活: 几乎celery的各个组件都可以被扩展及自定制

celery的使用:

python 编程实例_第2张图片

执行结果为:

python 编程实例_第3张图片


celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat

python 编程实例_第4张图片

add_periodic_task 会添加一条定时任务

执行结果为:

python 编程实例_第5张图片


你可能感兴趣的:(python 编程实例)