python线程安全及多进程多线程实现方法详解


Posted in Python onSeptember 27, 2019

进程和线程的区别

  • 进程是对运行时程序的封装,是系统资源调度和分配的基本单位
  • 线程是进程的子任务,cpu调度和分配的基本单位,实现进程内并发。
  • 一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存

什么是线程安全

一个线程的修改被另一个线程的修改覆盖掉。

python中哪些操作是线程安全的

  • 一个操作可以在多线程环境中使用,并且获得正确的结果。
  • 线程安全的操作线程是顺序执行的而不是并发执行的。
  • 一般涉及到写操作需要考虑如何让多个线程安全访问数据。

线程同步的方式

  • 互斥量(锁): 通过互斥机制防止多个线程同时访问公共资源。
  • 信号量(Semphare): 控制同一时刻多个线程访问同一个资源的线程数。 ps:python的threading 文档
  • 事件(信号): 通过通知的方式保持多个线程的同步。

进程间的通信方式 (IPC:Inter-Process Communication 进程间传递信号或者数据)

  • 管道/匿名管道/有名管道(pipe)
  • 信号(Signal):比如用户使用ctrl+c产生SIGINT程序终止信号
  • 消息队列(Message)
  • 共享内存(share memory)
  • 进程间的信号量(Semaphore)
  • 套接字(socket):最常用的方式,我们的web应用就是这种方式

多线程的例子

# python实现多线程
import threading

lock = threading.Lock()

n = [0]

def foo():
  with lock:  # 加锁
    n[0] = n[0] + 1
    n[0] = n[0] + 1


threads = [] # 用来储存所有线程
for i in range(5000):
  t = threading.Thread(target=foo)  # 传入foo函数
  threads.append(t)
for t in threads:
  t.start()

print(n)

多进程的例子

python有GIL,可以用多进程实现cpu密集程序

  • multiprocessing 多进程模块
  • multiprocessing.Process 类实现多进程
  • 一般在cpu密集的程序里面使用多进程,避免GIL的影响
# 多进程

import multiprocessing

def fib(n):
  if n<= 1:
    return 1
  return fib(n-1) + fib(n-2)



if __name__ == '__main__':
  jobs = []
  for i in range(10,20):
    p = multiprocessing.Process(target=fib, args=(i,))
    jobs.append(p)
    p.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python深入学习之上下文管理器
Aug 31 Python
python 计算两个日期相差多少个月实例代码
May 24 Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 Python
Python聊天室程序(基础版)
Apr 01 Python
基于python log取对数详解
Jun 08 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
详解Python sys.argv使用方法
May 10 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
Django单元测试工具test client使用详解
Aug 02 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
python入门教程之基本算术运算符
Nov 13 Python
python config文件的读写操作示例
Sep 27 #Python
Python queue队列原理与应用案例分析
Sep 27 #Python
python多环境切换及pyenv使用过程详解
Sep 27 #Python
python 哈希表实现简单python字典代码实例
Sep 27 #Python
python实现发送form-data数据的方法详解
Sep 27 #Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 #Python
Pycharm 字体大小调整设置的方法实现
Sep 27 #Python
You might like
终于听上了直流胆调频
2021/03/02 无线电
JS代码格式化和语法着色V2
2006/10/14 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
jQuery.buildFragment使用方法及思路分析
2013/01/07 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
IE、FF浏览器下修改标签透明度
2014/01/28 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
javascript高仿热血传奇游戏实现代码
2018/02/22 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
详解Python中的元组与逻辑运算符
2015/10/13 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
利用Python计算KS的实例详解
2020/03/03 Python
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
市场营销专科应届生求职信
2013/11/24 职场文书
医科大学生的自我评价
2013/12/04 职场文书
优秀求职信范文分享
2013/12/19 职场文书
大学生如何写自荐信
2014/01/08 职场文书
运动会广播稿300字
2014/01/10 职场文书
品德评语大全
2014/05/05 职场文书
课例研修方案
2014/05/31 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
员工培训协议书
2014/09/15 职场文书
催款律师函范文
2015/05/27 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python