python多线程下使用print输出挤在一行
【代码】python多线程下使用print输出挤在一行。
·
1. 问题描述
问题描述:多线程中使用print函数,有时会出现格式混乱的情况.
多个print()输出挤在一行.
from threading import Thread
import time
# 线程调用的函数
def func(i):
# 必须有一个io, 否则同一时间只有一个线程在执行. 有io后5个线程运行.
time.sleep(0.1)
print(i)
# 开启5个线程
for i in range(5):
t = Thread(target=func, args=(i,))
t.start()
终端显示:
32
4
10
2. 原因
导致问题的原因: 有些print的操作不具备原子性.
原子性: 指事务的不可分割性, 一个事务的所有操作要么不间断地全部被执行, 要么一个也没有执行.
于print的默认end参数为"\n",但end和print函数不是一起操作的,先打印value值, 再打印end的参数,.
多线程中, 这就会造成刚打印value的值还未来得及打印end的参数, 其他的线程也使用print()了.
3. 解决方案
解决问题: 手动指定换行符, 不使用end参数换行.
print(f'{i}\n', end='')
from threading import Thread
import time
# 线程调用的函数
def func(i):
# 必须有一个io, 否则同一时间只有一个线程在执行. 有io后5个线程运行.
time.sleep(0.1)
# 使用end执行换行, 自己换行
print(f'{i}\n', end='')
# 开启5个线程
for i in range(5):
t = Thread(target=func, args=(i,))
t.start()
终端显示:
4
3
1
2
0
文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)