博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python笔记05_多线程
阅读量:4294 次
发布时间:2019-05-27

本文共 1262 字,大约阅读时间需要 4 分钟。

实例

import time, threading  /# 新线程执行的代码:  def loop():      print('thread %s is running...' % threading.current_thread().name)      n = 0      while n < 5:          n = n + 1          print('thread %s >>> %s' % (threading.current_thread().name, n))          time.sleep(1)      print('thread %s ended.' % threading.current_thread().name)    print('thread %s is running...' % threading.current_thread().name)  t = threading.Thread(target=loop, name='LoopThread')  t.start()  t.join()  print('thread %s ended.' % threading.current_thread().name)

Lock

多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,
多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。
代码

balance = 0  lock = threading.Lock()    def run_thread(n):      for i in range(100000):          # 先要获取锁:          lock.acquire()          try:              # 放心地改吧:              change_it(n)          finally:              # 改完了一定要释放锁:              lock.release()

当多个线程同时执行lock.acquire()时,只有一个线程能成功地获取锁,然后继续执行代码,其他线程就继续等待直到获得锁为止。

获得锁的线程用完后一定要释放锁,否则那些苦苦等待锁的线程将永远等待下去,成为死线程。所以我们用try...finally来确保锁一定会

GIL锁

Python的线程虽然是真正的线程,但解释器执行代码时,有一个GIL锁:Global Interpreter Lock,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,让别的线程有机会执行。这个GIL全局锁实际上把所有线程的执行代码都给上了锁,所以,多线程在Python中只能交替执行,即使100个线程跑在100核CPU上,也只能用到1个核。

转载地址:http://egyws.baihongyu.com/

你可能感兴趣的文章
sql的left join 、right join 、inner join之间的区别
查看>>
Android 快速开发框架:推荐10个框架
查看>>
一路编程,一路迷茫,一路醒悟,接着迷茫,再醒悟再迷茫
查看>>
架构师修炼之道
查看>>
学习java与.net二者互通对比你从中获取的知识更多
查看>>
JAVA WebService开发入门引入
查看>>
教机器去感受:表情符号&深度学习
查看>>
facebook分享购物的代码测试
查看>>
ASP.NET(C#)常用数据加密和解密方法汇总
查看>>
Java连接各种数据库的实例
查看>>
怎样保持一个良好的开发状态
查看>>
Eclipse控制台中的中文输出乱码问题
查看>>
tomcat环境中file.encoding的修改方法
查看>>
mybatis association 复杂类型联合操作
查看>>
CSS图标ICO参考
查看>>
ueditor1_4_3-utf8-jsp 配置实现上传图片的功能
查看>>
大学生应该常去的网站
查看>>
Java与C/C++异构平台的本地通信(Java也可以操作硬件)
查看>>
美程序员低薪雇中国人编程 自己上班网购看视频
查看>>
为你推荐10款开发常用的代码编辑器
查看>>