python 编程实例
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 编程实例相关推荐
- Python编程实例03——对英文文本进行分词
系列目录 上一篇:Python编程实例02--实现斐波那契数列 文章目录 系列目录 前言 一.编程要点 1.split()函数 a.单个分隔符分割 b.多个分割符分割 2.sorted()函数与sor ...
- python高级练习题:多米诺平铺 - 5×2N局【难度:4级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python高级练习题:多米诺平铺 - 5×2N局[难度:4级]: 请还检查了在[多米诺拼接系列]其他练习题(https://www.codewars.com/collections/5d19554d ...
- python进阶练习题:馏分类【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:馏分类[难度:2级]: 为您提供了类"分数",这两个参数(分子,分母)的骨架. 例: fraction1 =分数(4,5) 分数fraction1 =新分数 ...
- python基础练习题:简单有趣#32:创建字谜【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:简单有趣#32:创建字谜[难度:1级]: 任务 现在给你两个字符串S和长度相同的T,由大写英文字母.你的任务是找到获得一些anagram的串T从字符串s需要"更换操作 ...
- python基础练习题:Covfefe【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:Covfefe[难度:1级]: Covfefe 你给出的字符串.你必须用'covfefe但替换的单词(S)coverage,如果你没有找到字符串中的单词'coverage,你必 ...
- Python基础练习题:杂乱无章的页面列表【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
Python基础练习题:杂乱无章的页面列表[难度:1级]: 你得到了一本古老的书,不幸的是有几页错误的位置,幸运的是你的计算机有一个从"1"到"n"的顺序的每个 ...
- python进阶练习题:简单有趣#301:跳绳游戏【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:简单有趣#301:跳绳游戏[难度:2级]: 任务 有些孩子在玩跳绳游戏.儿童跳过绳子在大致相同的速度:每一次秒'.如果孩子跳时失败,他需要整理一下绳子,然后继续.这将需要3 s ...
- python进阶练习题:格式化像“巴特,莉萨和玛吉”名称的字符串。【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:格式化像"巴特,莉萨和玛吉"名称的字符串.[难度:2级]: 给定:含名称的散列数组 返回:格式化为除了最后两个名字,应该由一个符号分隔用逗号分隔的名称列表的 ...
- python基础练习题:棋盘【难度:1级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python基础练习题:棋盘[难度:1级]: 编写打印N行M列下列规则棋盘的程序: 左上角单元格必须是一个星号(*) 任何细胞接触(左,右,上,下)有星号的小区必须是一个点(.) 任何细胞接触(左,右 ...
- python进阶练习题:自圣诞树III:叶中心【难度:2级】--景越Python编程实例训练营,不同难度Python习题,适合自学Python的新手进阶
python进阶练习题:自圣诞树III:叶中心[难度:2级]: 任务 圣诞节快到了.在[以前的习题(https://www.codewars.com/kata/5a405ba4e1ce0e1d7800 ...
最新文章
- WePY框架开发的小程序如何在微信web开发者工具中运行起来
- linux的find命令
- 功能、资源权限管理的设计
- 抓包写代码模拟怎么减少重复劳动
- 《机器学习实战》笔记(04):基于概率论的分类方法 - 朴素贝叶斯分类
- Android事件处理之处理键盘事件
- 关于mybatis中type-aliases-package使用的几个问题
- perl 操作redis 数据库 带用户名和密码验证,选择数据库0.1.2
- Jmeter 接口造数
- 图标搜索引擎:Findicons
- 北邮计算机考试大纲,北邮考试大纲
- Python爬取LOL英雄皮肤
- cocos2d-x精灵的放大和缩小
- HBuilder开发旅游类APP(一) ----- 实现地图插件调用、苹果和安卓同步混合开发
- 基于改进二进制粒子群算法的配电网重构(matlab实现)
- Android入门之把窗口信息传递给InputDispatcher
- EL表达式处理字符串
- 如何判断一个项目的可行性?
- AI中数据标注(Labeling)的介绍
- #JavaScript JQuery 实现新用户注册
热门文章
- STM32选型与命名规则
- 信号与线性系统管致中第六版pdf_2021年西北工业大学887信号与系统基础考研全套...
- 甘特图来啦,项目管理神器,模板直接用
- 图解设计模式:状态模式
- pycharm的python解释器选择_pycharm中配置python解释器
- Java菜鸟教程 标识符
- c语言程序设计实例220,C语言程序设计实例大全(220个例子)
- Logisim-Gates library
- STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.
- 文件夹同步/备份软件推荐 (SyncToy/FreeFileSync/Compare Advance/Good Sync/Allway Sync)