Python多线程同步输出1-100的数

一、多线程是什么

我们的程序默认只有一个进程,进程中有一个主线程,但是有个时候我们进行多个任务同时工作的时候就会> 发生任务不同步的问题,因为只有一个主线程,而主线程同时只能完成一个任务,所以下一个任务就会等待> 上一个任务完成后才能继续运行。

代码如下:

def print_num():
		while True:
			print(1)
	
def print_str():
	while True:
		print(2)

if __name__ == '__main__':
	print_num()
	print_str()

像上述代码一样,因为只有一个主线程的原因,所以只能等待print_num()函数的任务结束后才能继续执行print_str()函数,这样就会造成我们的效率低下的问题。
这里主要是讲述多线程同步输出数字,所以其他多线程理论就不再作过多的解释了,可以自行百度一下。

二、threading模块

threading模块是_thread模块的升级版,在_thread模块上做了很多的修改和优化,可以说是一个很不错的多线程模块了,所以本篇使用threading来做多线程的演示。

Thread:生成一个新的线程,对上面的代码进行多线程运行
import threading
def print_num():
		while True:
			print(1)
	
def print_str():
	while True:
		print(2)

if __name__ == '__main__':
	t1 = threading.Thread(target=print_num,args=())	#target是指定函数(不要带括号),args是函数的参数(如果没有参数可以省略不写)
	t2 = threading.Thread(target=print_str,args=())	#上面是print_num的线程,下面是print_str的线程
	t1.start()	#运行t1线程
	t2.start()	#运行t2线程

输出结果:
1
2
2
1
1
1
1
2

提示:输出结果的顺序是看谁运行速度的快慢决定的,你可以用time.sleep来拖慢某个线程的运行速度,以此更鲜明的看出对比

Lock:将数据加一把锁,数据正在被操作时其他线程等待数据操作完毕后才会进行操作
import threading
def worker():
    global count
    while True:
        lock.acquire()	#加锁
        count += 1
        print(threading.current_thread(),count)
        lock.release()	#操作完成后释放锁
        if count >= 99:
            break
        time.sleep(1)
    print(1)

def main():
    threads = []
    for i in range(2):	#控制线程的数量
        t = threading.Thread(target=worker,args=())
        threads.append(t)
    for i in threads:
        i.start()
    for i in threads:
        i.join()	#将线程加入到主线程中

if __name__ == '__main__':
    lock = threading.Lock()
    count = 0
    main()

输出结果:
<Thread(Thread-1, started 14844)> 1
<Thread(Thread-2, started 12112)> 2
<Thread(Thread-2, started 12112)> 3
<Thread(Thread-1, started 14844)> 4
<Thread(Thread-2, started 12112)> 5
<Thread(Thread-1, started 14844)> 6

<Thread(Thread-1, started 14844)> 100

这样就完成了多个线程来使数据相加。

相关推荐
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其中的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页