2018年5月26日笔记
- 习题1
先在utils.py文件中定义一个工具类
1 # utils.py 2 3 import os 4 import threading 5 import codecs 6 7 8 class WriteLog(threading.Thread): 9 def __init__(self, logName): 10 super(WriteLog, self).__init__() 11 self.logName = logName 12 self.lock = threading.Lock() 13 self.contexts = [] 14 self.mkfile() 15 16 def mkfile(self): 17 if not os.path.exists(self.logName): 18 with codecs.open(self.logName, 'w') as f: 19 f.write("This file is log for {0}\n".format(self.logName)) 20 21 def write(self, context): 22 self.contexts.append(context) 23 24 def run(self): 25 while 1: 26 self.lock.acquire() 27 if len(self.contexts) != 0: 28 with codecs.open(self.logName, "a") as f: 29 for context in self.contexts: 30 f.write(context) 31 del self.contexts[:] 32 self.lock.release()
在写主程序main.py,来实现将日志记录到main.log文件中
1 # main.py 2 3 from utils import WriteLog 4 import time 5 import sys 6 # reload(sys) # 这是python2的写法(进行编码转换),但是在python3中这个需要已经不存在了,这么做也不会什么实际意义。 7 # sys.setdefaultencoding("utf-8") 8 9 10 def Xh(): 11 for i in range(100): 12 print(i) 13 # 相当于sys.stdout.write(str(i)) 14 time.sleep(0.1) 15 16 17 def main(): 18 writeLog = WriteLog("main.log") 19 writeLog.start() 20 sys.stdout = writeLog 21 sys.stderr = writeLog 22 Xh() 23 24 25 if __name__ == "__main__": 26 main()
最终生成的日志文件main.log如下:
1 This file is log for main.log 2 0 3 1 4 2 5 3 6 4 7 5 8 6 9 7 10 8 11 9 12 10 13 11 14 12 15 13 16 14 17 15 18 16 19 17 20 18 21 19 22 20 23 21 24 22 25 23 26 24 27 25 28 26 29 27 30 28 31 29 32 30 33 31 34 32 35 33 36 34 37 35 38 36 39 37 40 38 41 39 42 40 43 41 44 42 45 43 46 44 47 45 48 46 49 47 50 48 51 49 52 50 53 51 54 52 55 53 56 54 57 55 58 56 59 57 60 58 61 59 62 60 63 61 64 62 65 63 66 64 67 65 68 66 69 67 70 68 71 69 72 70 73 71 74 72 75 73 76 74 77 75 78 76 79 77 80 78 81 79 82 80 83 81 84 82 85 83 86 84 87 85 88 86 89 87 90 88 91 89 92 90 93 91 94 92 95 93 96 94 97 95 98 96 99 97 100 98 101 99
- 习题2
先写一个utils2.py
1 from threading import Thread, Lock 2 import codecs 3 import os 4 5 6 class TraceLog(Thread): 7 def __init__(self, logName): 8 super(TraceLog, self).__init__() 9 self.logName = logName 10 self.lock = Lock() 11 self.contexts = [] 12 self.isFile() 13 14 def isFile(self): 15 if not os.path.exists(self.logName): 16 with codecs.open(self.logName, 'w') as f: 17 f.write("this log name is: {0}\n".format(self.logName)) 18 f.write("start log\n") 19 20 def write(self, context): 21 self.contexts.append(context) 22 23 def run(self): 24 while 1: 25 self.lock.acquire() 26 if len(self.contexts) !=0: 27 with codecs.open(self.logName, "a") as f: 28 for context in self.contexts: 29 f.write(context) 30 del self.contexts[:] # 注意不能忘记清空 31 self.lock.release()
再在main2.py中定义写主函数
1 ''' 2 不断记录服务端输入的日志 3 实现>> 和> 4 ''' 5 6 7 8 from utils2 import TraceLog 9 import time 10 import sys 11 12 class Server(object): 13 def printLog(self): 14 print("start server\n") 15 for i in range(100): 16 print(i) 17 time.sleep(0.1) 18 print("end server\n") 19 20 21 22 if __name__ == '__main__': 23 traceLog = TraceLog("main2.log") 24 traceLog.start() 25 sys.stdout = traceLog 26 sys.stderr = traceLog 27 server = Server() 28 server.printLog() 29 30 # 每当调用print的时候,底层就是在代用sys.stdout.write(str) 31 # sys.stdout.write() = traceLog.write()
生成日志文件main2.log如下:
1 this log name is: main2.log 2 start log 3 start server 4 5 0 6 1 7 2 8 3 9 4 10 5 11 6 12 7 13 8 14 9 15 10 16 11 17 12 18 13 19 14 20 15 21 16 22 17 23 18 24 19 25 20 26 21 27 22 28 23 29 24 30 25 31 26 32 27 33 28 34 29 35 30 36 31 37 32 38 33 39 34 40 35 41 36 42 37 43 38 44 39 45 40 46 41 47 42 48 43 49 44 50 45 51 46 52 47 53 48 54 49 55 50 56 51 57 52 58 53 59 54 60 55 61 56 62 57 63 58 64 59 65 60 66 61 67 62 68 63 69 64 70 65 71 66 72 67 73 68 74 69 75 70 76 71 77 72 78 73 79 74 80 75 81 76 82 77 83 78 84 79 85 80 86 81 87 82 88 83 89 84 90 85 91 86 92 87 93 88 94 89 95 90 96 91 97 92 98 93 99 94 100 95 101 96 102 97 103 98 104 99 105 end server
- 习题3
写一个celery配置文件celeryconfig.py
1 from kombu import Queue, Exchange 2 3 BROKER_URL = "redis://192.168.48.136:6379/1" 4 CELERY_RESULT_BACKEND = "redis://192.168.48.136:6379/2" 5 6 7 CELERY_QUEUES = { 8 Queue("default",Exchange("default"),routing_key="default"), 9 Queue("for_task_A",Exchange("for_task_A"),routing_key="for_task_A"), 10 Queue("for_task_B",Exchange("for_task_B"),routing_key="for_task_B") 11 } 12 13 CELERY_ROUTES = { 14 "demon3.taskA":{"queue":"for_task_A","routing_key":"for_task_A"}, 15 "demon3.taskB":{"queue":"for_task_B","routing_key":"for_task_B"} 16 } 17 CELERY_TIMEZONE = 'UTC' 18 CELERYBEAT_SCHEDULE = { 19 'taskA_schedule' : { 20 'task':'demon3.taskA', 21 'schedule':2, 22 'args':(5,6) 23 }, 24 'taskB_scheduler' : { 25 'task':"demon3.taskB", 26 "schedule":10, 27 "args":(10,20,30) 28 }, 29 'add_schedule': { 30 "task":"demon3.add", 31 "schedule":5, 32 "args":(1,2) 33 } 34 }
编写tasks.py
1 from celery import Celery 2 3 app = Celery() 4 app.config_from_object("celeryconfig") 5 6 @app.task 7 def taskA(x, y): 8 return x*y 9 10 @app.task 11 def taskB(x, y, z): 12 return x+y+z 13 14 @app.task 15 def add(x, y): 16 return x+y
编写demon.py
1 from celery import Celery 2 3 app = Celery() 4 app.config_from_object("celeryconfig") 5 6 @app.task 7 def taskA(x, y): 8 return x*y 9 10 @app.task 11 def taskB(x, y, z): 12 return x+y+z 13 14 @app.task 15 def add(x, y): 16 return x+y
编写test.py
1 import time 2 3 from demon import * 4 5 re1 = taskA.delay(10, 20) 6 7 re2 = taskB.delay(5, 15, 25) 8 9 re3 = add.delay(8, 18) 10 11 time.sleep(1) 12 print(re1.result) 13 print(re2.result) 14 print(re3.status) 15 print(re3.result)
转载于:https://www.cnblogs.com/karl-python/p/9097926.html
2018年5月26日笔记相关推荐
- 2018年4月26日笔记
内置模块:hashlib Python的hashlib提供了常见的摘要算法,如md5,sha1, sha224, sha256, sha384, sha512等等,其中md5最为常用. 什么是摘要算法 ...
- 2018年6月26日笔记
salt简介 是一个配置管理工具,使用轻量级的通讯器ZMQ(ZeroMQ),使用Python写成的批量管理工具,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,叫Salt State Sys ...
- 围棋AI.续一.Sabaki+Leela Zero+Leelasabaki.2018年6月26日
前言 年初,伴随着围棋AI的兴起,自己也试着安装.对弈.随后将自己的安装.使用记录下来,在简书这个平台发布,方便感兴趣的网友安装使用.对应链接:https://www.jianshu.com/p/c4 ...
- 2018年9月26日公司断网情况处理(交换机环路,err-disable state)
2018年9月26日周三晚,计划更换楼层交换机,之前已经把交换机按照旧的贾环己配置完毕.楼层交换机与核心交换机是采用2个光纤做捆绑,做链路聚合使用.交换机上架开启后,发现公司无线异常,ping服务器丢 ...
- 记账开始,记录个时间,免得偷懒2018年2月26日11:20:33
2018年2月26日11:20:27 2018年2月26日11:20:42 2018年2月26日11:20:49 2018年2月26日11:21:02 点击打开链接啊啊啊啊哦
- [直播预告]当ROS邂逅无人驾驶汽车(2018年9月26日)ROS meets Self-driving Cars
当ROS邂逅自动驾驶汽车 [LIVE STREAMING] ROS meets Self-driving Cars 直播日期:2018年9月26日| 下午6点CEST Live Date: Sep 2 ...
- 2018年11月26日到2019年4月26日工作汇总
2018年11月26日到2019年4月26日工作汇总 2018年11月26日-2017年11月30日 上午:各种协议的填写,已经有关表单的培训 下午:对公司目前做的项目的培训,以及明确我当前的工作 部 ...
- 2018年7月7日笔记整理
2018年7月7日星期六 操作系统: Operating System 简称OS 软硬件资源的管理者,是世界上最复杂的软件 主流操作系统: PC机:Windows, OS X(基于Unix), L ...
- 2018年7月3日笔记
state 1)state介绍 state是saltstack最核心的功能,通过预先指定好的sls文件对minion进行状态管理,支持pkg, file, network, service, user ...
- 2018年3月29日笔记
python数据类型:字符串string"" .元组tuple() .列表list[].字典dict{} 字符串可用单引号(' ')或双引号(" ")或三引号( ...
最新文章
- 如何成为一个Android高手
- asp.net 2.0 中GridView里设置日期格式
- 解决人际矛盾的英语口语10条
- Vscode配置C语言问题
- python资源百度云_Python Selenium 百度云分享链接资源 批量保存
- 用户调整listview的column的width处理
- 计算机真正管理的文件名是什么,计算机题,请大家多多帮忙,谢谢
- 基于mint-ui的城市选择3级联动
- bootstrap上传图片可实现查看上一张图片和下一张图片_如何实现像人民日报微信推文一样的的点亮效果?...
- Qt工作笔记-QList (链表) QVector (数组)【转载】
- Android8.0适配之一应用图标适配
- 双亲表示法 如何找到孩子结点_如何让孩子大量识字?我用3年实践找到最有效的方法...
- 面试pythone_叮!你需要的Python面试指南以送到!
- c语言发牌小游戏,大家想想怎么用c实现我们经常玩的斗地主游戏的发牌过程呢?...
- Vivado exception_access_violation
- paip.php调试不能显示局部变量内容w/ xdebug
- java mvc接收json_java相关:SpringMVC中controller接收json数据的方法
- 马哥linux多道处理程序,马哥linux课堂笔记
- cachecloud java_cachecloud安装部署
- @SuppressWarnings注解用法详解
热门文章
- 逻辑回归分析与回归分析_逻辑回归从零开始的情感分析
- if else if语句格式_Python中的if条件语句
- mysql事务隔离的锁_mysql锁及四种事务隔离级别笔记
- java断言的例子_Java 8 谓词/断言的例子
- 64位字长的高性能微型计算机,什么是字长字节和字长的区别
- HTML5 的输入类型(input type)
- 数据结构与算法 - 图论
- Ubuntu 16.04 LTS Final Beta about JAVA
- zz java compare 接口
- group by 深入总结