1.python编程实例

实现目的

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

编程代码:

import codecs
import sys
import time
from threading import Thread, Lock
import osclass TraceLog(Thread):def __init__(self, logName):super(TraceLog, self).__init__()self.logName = logNameself.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 = traceLogsys.stderr = traceLogserver = 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 会添加一条定时任务

执行结果为:

python 编程实例相关推荐

  1. Python编程实例03——对英文文本进行分词

    系列目录 上一篇:Python编程实例02--实现斐波那契数列 文章目录 系列目录 前言 一.编程要点 1.split()函数 a.单个分隔符分割 b.多个分割符分割 2.sorted()函数与sor ...

  2. python高级练习题:多米诺平铺 - 5×2N局【难度:4级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python高级练习题:多米诺平铺 - 5×2N局[难度:4级]: 请还检查了在[多米诺拼接系列]其他练习题(https://www.codewars.com/collections/5d19554d ...

  3. python进阶练习题:馏分类【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:馏分类[难度:2级]: 为您提供了类"分数",这两个参数(分子,分母)的骨架. 例: fraction1 =分数(4,5) 分数fraction1 =新分数 ...

  4. python基础练习题:简单有趣#32:创建字谜【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python基础练习题:简单有趣#32:创建字谜[难度:1级]: 任务 现在给你两个字符串S和长度相同的T,由大写英文字母.你的任务是找到获得一些anagram的串T从字符串s需要"更换操作 ...

  5. python基础练习题:Covfefe【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python基础练习题:Covfefe[难度:1级]: Covfefe 你给出的字符串.你必须用'covfefe但替换的单词(S)coverage,如果你没有找到字符串中的单词'coverage,你必 ...

  6. Python基础练习题:杂乱无章的页面列表【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    Python基础练习题:杂乱无章的页面列表[难度:1级]: 你得到了一本古老的书,不幸的是有几页错误的位置,幸运的是你的计算机有一个从"1"到"n"的顺序的每个 ...

  7. python进阶练习题:简单有趣#301:跳绳游戏【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:简单有趣#301:跳绳游戏[难度:2级]: 任务 有些孩子在玩跳绳游戏.儿童跳过绳子在大致相同的速度:每一次秒'.如果孩子跳时失败,他需要整理一下绳子,然后继续.这将需要3 s ...

  8. python进阶练习题:格式化像“巴特,莉萨和玛吉”名称的字符串。【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:格式化像"巴特,莉萨和玛吉"名称的字符串.[难度:2级]: 给定:含名称的散列数组 返回:格式化为除了最后两个名字,应该由一个符号分隔用逗号分隔的名称列表的 ...

  9. python基础练习题:棋盘【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python基础练习题:棋盘[难度:1级]: 编写打印N行M列下列规则棋盘的程序: 左上角单元格必须是一个星号(*) 任何细胞接触(左,右,上,下)有星号的小区必须是一个点(.) 任何细胞接触(左,右 ...

  10. python进阶练习题:自圣诞树III:叶中心【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶

    python进阶练习题:自圣诞树III:叶中心[难度:2级]: 任务 圣诞节快到了.在[以前的习题(https://www.codewars.com/kata/5a405ba4e1ce0e1d7800 ...

最新文章

  1. WePY框架开发的小程序如何在微信web开发者工具中运行起来
  2. linux的find命令
  3. 功能、资源权限管理的设计
  4. 抓包写代码模拟怎么减少重复劳动
  5. 《机器学习实战》笔记(04):基于概率论的分类方法 - 朴素贝叶斯分类
  6. Android事件处理之处理键盘事件
  7. 关于mybatis中type-aliases-package使用的几个问题
  8. perl 操作redis 数据库 带用户名和密码验证,选择数据库0.1.2
  9. Jmeter 接口造数
  10. 图标搜索引擎:Findicons
  11. 北邮计算机考试大纲,北邮考试大纲
  12. Python爬取LOL英雄皮肤
  13. cocos2d-x精灵的放大和缩小
  14. HBuilder开发旅游类APP(一) ----- 实现地图插件调用、苹果和安卓同步混合开发
  15. 基于改进二进制粒子群算法的配电网重构(matlab实现)
  16. Android入门之把窗口信息传递给InputDispatcher
  17. EL表达式处理字符串
  18. 如何判断一个项目的可行性?
  19. AI中数据标注(Labeling)的介绍
  20. #JavaScript JQuery 实现新用户注册

热门文章

  1. STM32选型与命名规则
  2. 信号与线性系统管致中第六版pdf_2021年西北工业大学887信号与系统基础考研全套...
  3. 甘特图来啦,项目管理神器,模板直接用
  4. 图解设计模式:状态模式
  5. pycharm的python解释器选择_pycharm中配置python解释器
  6. Java菜鸟教程 标识符
  7. c语言程序设计实例220,C语言程序设计实例大全(220个例子)
  8. Logisim-Gates library
  9. STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.
  10. 文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance/Good Sync/Allway Sync)