python 批量创建线程_【Python】批量创建线程
在《【Python】线程的创建、执行、互斥、同步、销毁》(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条。其实,Python里是可以批量创建线程的。利用Python批量创建线程可以将之前的程序优化,具体请看如下的代码:
# -*-coding:utf-8-*-
import threading;
mutex_lock = threading.RLock(); # 互斥锁的声明
ticket = 100000; # 总票数
# 用于统计各个线程的得票数
ticket_stastics=[];
class myThread(threading.Thread): # 线程处理函数
def __init__(self, name):
threading.Thread.__init__(self); # 线程类必须的初始化
self.thread_name = name; # 将传递过来的name构造到类中的name
def run(self):
# 声明在类中使用全局变量
global mutex_lock;
global ticket;
while 1:
mutex_lock.acquire(); # 临界区开始,互斥的开始
# 仅能有一个线程↓↓↓↓↓↓↓↓↓↓↓↓
if ticket > 0:
ticket -= 1;
# 统计哪到线程拿到票
print "线程%s抢到了票!票还剩余:%d。" % (self.thread_name, ticket);
ticket_stastics[self.thread_name]+=1;
else:
break;
# 仅能有一个线程↑↑↑↑↑↑↑↑↑↑↑↑
mutex_lock.release(); # 临界区结束,互斥的结束
mutex_lock.release(); # python在线程死亡的时候,不会清理已存在在线程函数的互斥锁,必须程序猿自己主动清理
print "%s被销毁了!" % (self.thread_name);
# 初始化线程
threads = [];#存放线程的数组,相当于线程池
for i in range(0,5):
thread = myThread(i);#指定线程i的执行函数为myThread
threads.append(thread);#先讲这个线程放到线程threads
ticket_stastics.append(0);# 初始化线程的得票数统计数组
for t in threads:#让线程池中的所有数组开始
t.start();
for t in threads:
t.join();#等待所有线程运行完毕才执行一下的代码
print "票都抢光了,大家都散了吧!";
print "=========得票统计=========";
for i in range(0,len(ticket_stastics)):
print "线程%d:%d张" % (i,ticket_stastics[i]);
运行结果还是原来的功能:
但是,这里利用了一个数组和for循环创建线程,先遍历创建一堆线程放到线程池threads里面,实质上所谓的“线程池”也就是存放线程的数组,再用一个for循环,让这个线程池threads里面的线程全部开始。
# 初始化线程
threads = [];#存放线程的数组,相当于线程池
for i in range(0,5):
thread = myThread(i);#指定线程i的执行函数为myThread
threads.append(thread);#先讲这个线程放到线程threads
for t in threads:#让线程池中的所有数组开始
t.start();
for t in threads:
t.join();#等待所有线程运行完毕才执行一下的代码待所有线程开始之后,再让主线程,也就是整个主程序,等待所有子线程thread结束才执行下面的代码。
这里不能写成如下的代码段:
for t in threads:#让线程池中的所有数组开始
t.start();
t.join();#等待所有线程运行完毕才执行一下的代码这样的话,主程序会等待线程0,跑完myThread中的所有代码,才去创建线程1,2,3.....的,这样达不到线程并发的目的,程序变成单线程执行了,这是批量创建线程需要注意的地方。
python 批量创建线程_【Python】批量创建线程相关推荐
- python django 动态网页_使用Django创建动态页面
将 URL 映射到视图 那么概括起来,该视图函数返回了包含当前日期和时间的一段 HTML 页面.但是如何告诉 Django 使用这段代码呢?这就是 URLconfs 粉墨登场的地方了. URLconf ...
- python调用ping命令_我可以创建一个脚本来测试是否可以在python服务器上远程使用SSH和PING命令吗? - python...
我可以创建脚本来测试是否可以在python中远程使用服务器上的SSH和PING命令吗? 参考方案 好的,这是Python3和Linux的示例.只需记住,您的目标主机/服务器必须正在运行SSH服务器才能 ...
- python输出文本居中_#python PIL ImageDraw text 文本居中#
python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...
- python多进程编程实例_[python] Python多进程编程技术实例分析
这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...
- python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件
1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...
- python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...
最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...
- python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程
用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...
- python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !
没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...
- python shell如何打开_“python shell怎么打开“python shell启动教程
python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...
- linux 线程_浅谈Linux线程模型
Thread Basic 基础概念 线程是操作系统能够调度和执行的基本单位,在Linux中也被称之为轻量级进程.从定义中可以看出,线程它是操作系统的概念,在不同的操作系统中的实现是不同的,不过今天分享 ...
最新文章
- Python学习笔记-进度条
- ajxa异步请求数据
- 雷达成像技术_毫米波立体成像雷达技术研究
- what companies will vc invest?
- VTK:隐式函数之SampleFunction
- 安营扎寨【我与51CTO的故事】
- 微软修复工具_微软正在推出更新以修复此前被发现的Windows 10 SFC问题
- 机器视觉--入门小结
- 自定判断代码的执行环境
- 《Docker技术入门与实战》——3.5 创建镜像
- 阿里云破世界记录,王坚说新登月计划需十年,我看不用!
- BATJTMD,大厂招聘,都怎么面Java程序员?
- 使用51单片机驱动航模无刷电机
- python rgb565_RGB565的转换
- postgres mysql quora_DesktopReader for Quora
- ❤520给她准备的情人节礼物~html+css+javascript漫天飞雪3D相册(含音乐)
- 解决!适用黑苹果解决充电和使用电池中黑苹果自动睡眠
- 天津专升本机构避雷指南
- 用Python做雷霆战机小游戏【附素材+源码】
- PHP设计模式(2) -创建型模式
热门文章
- POSIX文件及目录管理
- ubuntu 16.04 apt源使用阿里云镜像
- 深度学习框架Neon
- JAVA程序设计----IO流基础(上)
- leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)
- leetcode 907. Sum of Subarray Minimums | 907. 子数组的最小值之和(单调栈)
- Redis使用场景、Redis线程模型、Redis持久化 - 公开课笔记
- java高级用法之:调用本地方法的利器JNA
- troubleshoot之:GC调优到底是什么
- Kafka单机、集群模式安装详解(二)