python多线程练习题

多线程练习题目,涉及知识点较多,属于很好的练习题。

题目要求

通过多线程实现类似linux中的>>功能,也就是将日志记录到指定的文件中。

题目分析

基本为main.py写主要处理逻辑,utils.py构造工具类及对应的方法。

main.py

定义Server()类,类中定义方法输出内容。

实例化工具类,启动线程,设置标准输出和错误输出至日志文件。

实例化Server()类并调用方法进行内容的持续输出。

utils.py

定义工具类,工具类需要传入参数:日志名称。

首先判断日志是否存在,若不存在则创建,然后写入日志;存在则追加写入日志。

实现

main.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import sys

from queue1.log_out.utils import TraceLog

class Server(object):

def log(self):

print("start server")

for i in range(100):

print(i)

print("end server") #print的实现是调用sys.stdout.write()方法

if __name__ == "__main__":

traceLog = TraceLog("main.log")

traceLog.start()

sys.stdout = traceLog

sys.stderr = traceLog

server = Server()

server.log() #print将会调用traceLog.write()方法

utils.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import codecs

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

输出结果

当前目录下会生成main.log文件,文件内容如下

1

2

3

4

5

6

7

8

9

10

11

this log name is :main.log

start log

start server

0

1

2

.

.

98

99

end server

涉及文件读写、锁、多线程、sys模块、os模块等内容。

python 选择题 多线程_python多线程练习题相关推荐

  1. python线程唤醒_python 多线程

    python 多线程 真正的多线程吗? 对于多核处理器,在同一时间确实可以多个线程独立运行,但在Python中确不是这样的了.原因在于,python虚拟机中引入了GIL这一概念.GIL(Global ...

  2. python 选择题 多线程_python多线程一些知识点梳理

    学习python的进程和线程以来,对这两个概念一直都处于模糊状态,所以决定花点时间好好学习一下这块知识.以下是我自己在学习过程中形成的一些疑问以及搜集的一些相应的比较好的答案,整理如下,方便复习自查. ...

  3. python守护多线程_Python多线程Threading、子线程与守护线程实例详解

    线程Threading: python中多线程需要使用threading模块 线程的创建与运行: 1.直接调用threading的Thread类: 线程的创建:线程对象=thread.Thread(t ...

  4. python 接口测试多线程_python多线程测试接口性能,就是这么简单

    除了使用性能测试工具进行性能测试,我们也可以直接用python多线程进行性能测试. 下面,使用这几个模块,对一个查询接口做性能测试: requests:发送http请求 json:返回的字符串转换成j ...

  5. python如何使用多线程_python多线程应用中的详细介绍

    python多线程在应用的时候有不少的事情需要重点的注意.其实只要掌握这些相关的技术段就能保证这个应用的完整.下面我们来看看具体是需要如何进行操作. 今天看了近一天关于多线程的应用中,如何安全调用py ...

  6. python多线程_python多线程:控制线程数量

    背景 前段时间学习了python的多线程爬虫,当时爬取一个图片网站,开启多线程后,并没有限制线程的数量,也就是说,如果下载1000张图片,会一次性开启1000个子线程同时进行下载 现在希望控制线程数量 ...

  7. python线程创建对象_python 多线程(一)

    (一) 线程概述 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程.当一个程序运行时,内部可能包含多个顺序执流,每个顺序执行流就是一个线程. 进程和线程 ...

  8. 多线程python实现方式_python多线程的两种实现方式(代码教程)

    本篇文章给大家带来的内容是关于python多线程的两种实现方式(代码教程),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 线程是轻量级的进程,进程中可划分出多个线程,线程可独立的调度 ...

  9. python如何使用多线程_Python多线程与多线程中join()的用法

    Python多线程与多进程中join()方法的效果是相同的. 下面仅以多线程为例: 首先需要明确几个概念: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流的最小单元,当设置 ...

最新文章

  1. Flask之WTForms验证
  2. 如何查看某一表空间内有那些表
  3. UFLDL教程: Exercise:Self-Taught Learning
  4. SpringCloudGateway起步
  5. sql注入攻击_让你彻底明白sql注入攻击
  6. python机械_10分钟掌握Python-机器学习小项目
  7. 个人博客作业-week5-敏捷开发方法读后感
  8. linux比较两个目录的差异
  9. 最小割最大流算法matlab,matlab练习程序(最大流/最小割)
  10. MIT 18.01 单变量微积分总结
  11. adams c语言,Adams2013编译C语言用户子程序生成dll超详细教程讲解
  12. 线性表的链式存储结构 ( 链表 )
  13. 基于.net开发chrome核心浏览器
  14. C语言人五英尺七英寸,5尺7寸(5尺7寸是多高美国)
  15. yolov3/yolov4/yolov5/yolov6/yolov7/lite/fastdet/efficientdet各系列模型开发、项目交付、组合改造创新之—桥梁基建隧道裂痕裂缝检测实战
  16. 积木机器人拼装图恐龙图纸_‎App Store: 机器人积木模型--恐龙积木拼装对战游戏...
  17. Python和Java哪个好学?
  18. GB2312与utf16、utf8的汉字对照表
  19. 短语、直接短语、句柄、素短语
  20. 小程序瀑布流_小程序界面设计 | 太古可口可乐会员平台

热门文章

  1. Android.mk的一些FAQ
  2. Android应用开发:Dialog使用及示例
  3. iOS base64编解码
  4. tensorflow之安装opencv
  5. 流式上传文件到服务器磁盘,在ASP.NET中流式传输大文件上传
  6. python中property函数_Python中的property()函数
  7. tensor索引[..., 0]
  8. Error while waiting for device: The emulator process for AVD Pixel_API_30 has terminated.
  9. Android导入第三方类库
  10. Python求1~300之间所有的完数