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是为了避免文章提示质量低.


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值