在《【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】批量创建线程相关推荐

  1. python django 动态网页_使用Django创建动态页面

    将 URL 映射到视图 那么概括起来,该视图函数返回了包含当前日期和时间的一段 HTML 页面.但是如何告诉 Django 使用这段代码呢?这就是 URLconfs 粉墨登场的地方了. URLconf ...

  2. python调用ping命令_我可以创建一个脚本来测试是否可以在python服务器上远程使用SSH和PING命令吗? - python...

    我可以创建脚本来测试是否可以在python中远程使用服务器上的SSH和PING命令吗? 参考方案 好的,这是Python3和Linux的示例.只需记住,您的目标主机/服务器必须正在运行SSH服务器才能 ...

  3. python输出文本居中_#python PIL ImageDraw text 文本居中#

    python pip pil有什么东西 你所问的问题实是属1.先参考[教程]Python中的内置的和方的模块搞懂PIL是属于第三方Python模块2.再参考:[待完善][总结]Python安装第三方的 ...

  4. python多进程编程实例_[python] Python多进程编程技术实例分析

    这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...

  5. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  6. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...

    最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...

  7. python快速爬虫视频_“python怎么快速爬虫视频“python 爬网页视频教程

    用python怎样爬网页 # coding:utf8 import cookielib import urllib2 url = "http://blog.uouo123.com" ...

  8. python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !

    没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...

  9. python shell如何打开_“python shell怎么打开“python shell启动教程

    python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...

  10. linux 线程_浅谈Linux线程模型

    Thread Basic 基础概念 线程是操作系统能够调度和执行的基本单位,在Linux中也被称之为轻量级进程.从定义中可以看出,线程它是操作系统的概念,在不同的操作系统中的实现是不同的,不过今天分享 ...

最新文章

  1. Python学习笔记-进度条
  2. ajxa异步请求数据
  3. 雷达成像技术_毫米波立体成像雷达技术研究
  4. what companies will vc invest?
  5. VTK:隐式函数之SampleFunction
  6. 安营扎寨【我与51CTO的故事】
  7. 微软修复工具_微软正在推出更新以修复此前被发现的Windows 10 SFC问题
  8. 机器视觉--入门小结
  9. 自定判断代码的执行环境
  10. 《Docker技术入门与实战》——3.5 创建镜像
  11. 阿里云破世界记录,王坚说新登月计划需十年,我看不用!
  12. BATJTMD,大厂招聘,都怎么面Java程序员?
  13. 使用51单片机驱动航模无刷电机
  14. python rgb565_RGB565的转换
  15. postgres mysql quora_DesktopReader for Quora
  16. ❤520给她准备的情人节礼物~html+css+javascript漫天飞雪3D相册(含音乐)
  17. 解决!适用黑苹果解决充电和使用电池中黑苹果自动睡眠
  18. 天津专升本机构避雷指南
  19. 用Python做雷霆战机小游戏【附素材+源码】
  20. PHP设计模式(2) -创建型模式

热门文章

  1. POSIX文件及目录管理
  2. ubuntu 16.04 apt源使用阿里云镜像
  3. 深度学习框架Neon
  4. JAVA程序设计----IO流基础(上)
  5. leetcode 911. Online Election | 911. 在线选举(加强堆 + 二分查找)
  6. leetcode 907. Sum of Subarray Minimums | 907. 子数组的最小值之和(单调栈)
  7. Redis使用场景、Redis线程模型、Redis持久化 - 公开课笔记
  8. java高级用法之:调用本地方法的利器JNA
  9. troubleshoot之:GC调优到底是什么
  10. Kafka单机、集群模式安装详解(二)