欢迎您访问九擎网络科技官网,今天是 2019年01月08日 星期二
|  手机版 |   表格下载 |   客户留言 |   备案申请   建站申请 建站服务热线:0379-8088 8006

洛阳九擎网络科技公司

九擎新闻 建站资讯 网站建设 网站优化 微信营销 软件开发 移动开发 互联网+
主页 > 新闻动态 > 软件开发 >

python基础——线程

九擎科技2018-07-17

  学习Python线程

Pyth​on3 线程中常用的两个模块为:

  _thread

  threading(推荐使用)

  thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。

  Python中使用线程有两种方式:函数或者用类来包装线程对象。

  函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下

  import threading

  import time

  def someting():

  for i in range(1,11):

  print(i)

  time.sleep(1)

  threading._start_new_thread(someting(),())

  print("main")

  类方式:

  class Mythread(threading.Thread):

  def __init__(self):

  threading.Thread.__init__(self)

  print("Mythread")

  def run(self):

  for i in range(1,11):

  print(i)

  time.sleep(1)

  def start(self):

  print("开始Mythread")

  super().start()

  t=Mythread()

  t2 = Mythread()

  t.start()

  t2.start()

  如果重写了start一定要调用父类的start.run会在strat之后自动调用,join线程阻塞方法,那个线程调用那个线程阻塞。

  线程锁:

  当多个线程同时进行任务时,为了保证不会有多个线程同时对同一个数据进行操作造成不可预料的后果,所以有了线程锁。

  生成一个锁:

  lock = threading.Lock()cond = threading.Condition(lock=lock)

  锁当然有上锁和未上锁两种状态,当一个线程要访问数据时,必须要先获得锁,如果已经有别的线程获得锁,那么就进入等待状态,等别的线程把锁释放后,再进行操作。

  下面是一个简单的线程锁代码:

  import threading

  import time

  import random

  class Thread1(threading.Thread):

  def run(self):

  for i in range(1,11):

  if i==3:  #当Thread1运行到3的时候进入

  cond.acquire() #锁

  cond.wait()  #等待Thread2运行完成

  cond.release()

  print(i)

  time.sleep(1)

  class Thread2(threading.Thread):

  def run(self):

  for i in range(30,19,-1):

  print(i)

  time.sleep(1)

  cond.acquire()

  cond.notify()  #唤醒

  cond.release()

  lock = threading.Lock()

  cond = threading.Condition(lock=lock)

  t1 = Thread1()

  t2 = Thread2()

  t1.start()

  t2.start()

  有4个和尚,一个做饭的三个吃饭的。

  也就是经典的生产者和消费者,用到线程锁技术:

  import threading

  import time

  import random

  class Huofu(threading.Thread):

  def __init__(self,name=None):

  threading.Thread.__init__(self)

  self.name = name

  def run(self):

  while True:

  cond.acquire()

  if len(guo)==0:

  for i in range(1,11):

  guo.append(i)

  print('做出第{0}个馒头'.format(i))

  time.sleep(1)

  cond.notify_all()

  cond.release()

  cond2.acquire()

  cond2.wait()

  cond2.release()

  class Chihuo(threading.Thread):

  def __init__(self,name=None):

  threading.Thread.__init__(self)

  self.name = name

  def run(self):

  while True:

  mantou=None

  cond.acquire()

  if len(guo)==0:

  cond2.acquire()

  cond2.notify()

  cond2.release()

  cond.wait()

  else:

  mantou=guo.pop()

  cond.release()

  if mantou is not None:

  print('{0}正在吃{1}'.format(self.name,mantou))

  time.sleep(random.randint(1,5))

  guo = []

  lock = threading.Lock()

  cond = threading.Condition(lock=lock)#吃的锁

  lock2 = threading.Lock()

  cond2 = threading.Condition(lock=lock2)#蒸馒头的锁

  Huofu(name='做饭和尚').start()

  Chihuo(name='长眉和尚吃饭').start()

  Chihuo(name='短眉和尚吃饭').start()

  Chihuo(name='中眉和尚吃饭').start()

  希望能为您带来帮助,更多详情请继续关注我们洛阳软件网站建设


(非特殊说明,本文版权归原作者所有,转载请注明出处 )


九擎科技致力于为企业提供创意设计、网站建设、定制开发、运营及推广等全方位服务。
联系电话:0379-8088 8006
联系手机:15515315959
想在手机上、随时获取互联网前沿、设计资讯以及各种意想不到的"福利"吗?通过扫描二维码快速添加

分享到微信QQ空间QQ好友腾讯微博新浪微博0
上一篇:Java对象和类
返回资讯列表
下一篇:没有了
16日
2018年07月

Java对象和类

Java作为一种面向对象的语言。支持以下基本概念 *继承 *多态 *封装 *抽象 *类 *对象 *实例 *方法 *重载 对象:对象是类的一个实例。 类:类是一类对象抽象...

12日
2018年07月

C#学习日志之数据类型

数据类型: 一、值类型 1、 整数类型: sbyte(有符号8位)、byte(无符号8位)、short(有符号16位)、ushort(无符号16位)、int(有符号32位)、uint(无符号...

20日
2018年06月

网站建设细节上的注意有哪些

网站建设工作在建设者看来是一件十分简单的事情,但是任何事情想要做好做大却是很难的。 洛阳网站建设公司 就根据网站建设和运营举例说明,网站运...

09日
2018年07月

网站优化完成,资讯恢复更新

九擎科技网站经历了长达一周的优化维护,今天终于恢复正常,资讯将恢复更新,小伙伴们来试试看是不是有不同呢...

10日
2018年07月

关键词排名提升工具快速排名上首页真的有效吗

关键词排名是SEO优化工作的核心工作,网站还有获得排名后才能够获得搜索引擎的流量,进而流量才能够转化为用户或者价值,这一点在企业 网站优化 工...

27日
2018年06月

亟待攻克核心技术:算法欠账多 国产“大脑”爱出错

亟待攻克的核心技术 两台机器人分别控制双层托盘,让其不断地倾斜、转动,另一台机器人控制机械臂在托盘上十个障碍物间不停地穿行而不受阻碍。这段...

23日
2018年06月

企业门户网站建设有哪些必须要注重的要点?

当前,对于一个企业来说,建设企业门户网站的主要目的包括以下方面:宣传企业品牌形象、提升企业知名度;发布产品信息、获取潜在客户;寻求合作机...

23日
2018年06月

APP开发过程中都需要解决哪些问题?

如今,APP开发成为了每个商业领域,在移动端较好的获取潜在客户和获得发展的方式。同时在发展迅速的移动行业中,如果想要迅速成为移动端的用户入口...

中国(河南)自由贸易试验区洛阳片区涧西区秦岭路卓阳科技园内 0379-8088 8006 0379-8088 8006 Copyright © 2005-2018 九擎科技 版权所有 豫ICP备17033118号-1
友情链接: 九擎科技