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中datetime常用时间处理方法
Jun 15 Python
python中的编码知识整理汇总
Jan 26 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
matplotlib绘制动画代码示例
Jan 02 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
Feb 22 Python
Python3使用TCP编写一个简易的文件下载器功能
May 08 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
Python进行统计建模
Aug 10 Python
python zip()函数的使用示例
Sep 23 Python
Python字符串的转义字符
Apr 07 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
供参考的 php 学习提高路线分享
2011/10/23 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
VUEX-action可以修改state吗
2019/11/19 Javascript
[04:28]2014DOTA2国际邀请赛 采访小兔子LGD挺进钥匙体育馆
2014/07/14 DOTA
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
django日志默认打印request请求信息的方法示例
2020/05/17 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
酒店前厅员工辞职信
2014/01/08 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
2014年自愿离婚协议书范本
2014/09/25 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
走进毛泽东观后感
2015/06/04 职场文书
团支部书记竞选稿
2015/11/21 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python