关于实现顺序

关于实现顺序

http://img1.sycdn.imooc.com//climg/5ec4d43709ff8f0203720199.jpg

老师,我还是有点想不通这个实现顺序

按照以往的逻辑,从上到下执行,应该是先把t1执行完毕才继续执行t2的呀,也就是说不存在两个进程互相干扰的情况

这里是怎么回事呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕觉浅 2020-05-20 15:57:25

同学你好:主线程根据代码顺序从上向下执行,执行到t1.start()时t1子线程开始运行,t2.start()时t2子线程开始运行,这两个子线程是在不同的线程中执行的,没有相互干扰,但哪个快哪个慢就说不准了,所以输出时的顺序是不一定的。t1.join()是主线程需等待t1运行完才能继续运行,t2.join()是主线程也必须等待t2运行完才能继续运行,因此会在最后输出'the last:0'。

如果解决了你的疑惑,请采纳,祝学习愉快~


  • 觉浅老师,是哪一步给t1t2添加了子线程呢? #我的银行账户 import threading import time balance = 0 def change_it(n): '''改变我的余额''' global balance balance = balance + n time.sleep(2) balance = balance - n time.sleep(1) print('N:{};balance:{}'.format(n,balance)) class ChangeBalanceThread(threading.Thread): ''' 改变银行余额的线程 ''' def __init__(self,num,*args,**kwargs): super().__init__(*args,**kwargs) self.num = num def run(self): for i in range(1000000): change_it(self.num) if __name__ == '__main__': t1 = ChangeBalanceThread(5) t2 = ChangeBalanceThread(8) t1.start() t2.start() t1.join() t2.join() print('the last:{}'.format(balance)) 代码如上,我一开始以为是继承了threading.Thread的ChangeBalanceThread方法,但是它并没有之前讲的threading.current_thread()这样一个方法
    2020-05-20 16:04:08
  • 同学你好: ChangeBalanceThread类是继承自threading.Thread类的,因此可以使用该类创建子线程。t1 = ChangeBalanceThread(5)是创建t1子线程,但还没有开始运行;t1.start()是t1开始运行。t2也是类似的。而主线程是我们当前执行的一行行的代码所在的线程,可以直接print(threading.current_thread())输出主线程。
    2020-05-20 17:45:39
  • 是所有继承自threading.Thread类的方法都可以创建子线程么
    2020-05-20 17:51:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师