python 编程实例

本文介绍了Python编程实例,包括使用多线程写入文件并保护共享数据,以及重写write方法将print数据写入文件。此外,文章探讨了Celery作为任务调度利器的功能和优点,如分布式异步任务处理、高可用性和灵活性,并展示了如何设置定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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')

执行结果为:


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


2.任务调度利器:Celery

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

 Celery有以下优点:

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

celery的使用:


执行结果为:



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


add_periodic_task 会添加一条定时任务

执行结果为:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值