python学习心得(1)多线程顺序执行

这篇博客分享了作者在学习Python多线程时遇到的一道经典面试题,内容涉及如何实现5个线程按顺序输出12345。通过使用Condition对象,详细解释了线程间同步的原理,有助于初学者理解多线程的控制机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学python的多线程,有一道经典的面试题,对于很多和我一样的初学者来说可能开始都不容易理解和掌握。

分享一下自己的理解和代码。重点是***的部分,希望对大家有帮助!

问:生成5个线程按照顺序来输出1234512345... 。其中1为线程1输出,2为线程2输出以此类推。

思路:使用Condition 

解答:

import threading

cond = threading.Condition() # 利用Condition

# 
def domywork(threadnum):
    print(str(threadnum), end='')

# 构建一个自己的线程类
class mythread(threading.Thread):
    def __init__(self, threadnum, thdcnt):
        threading.Thread.__init__(self)  # 父类初始化
        self.thdnum = threadnum
        self.thdcnt = thdcnt

    def run(self) -> None:
        global nowthdnum
        jobcnt = 10 # 这里循环了10次,也可以放到mythread类的参数里,自己做做
        for i in range(jobcnt):
            with cond:
                # *** 这里是重点1:因为系统调度线程执行时是任意的,即处于就绪状态的线程都可能被调度执行  ***
                # 所以,执行到这里时,判断一下执行中的线程如果不等于nowthdnum(即没有按指定顺序执行时,让这个线程等待)
                while nowthdnum != self.thdnum:
                    cond.wait()

                # print('-- nowthdnum 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值