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函数帮助查询小工具
Mar 13 Python
python处理圆角图片、圆形图片的例子
Apr 25 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
Apr 12 Python
Python 实现12306登录功能实例代码
Feb 09 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
selenium+python自动化测试环境搭建步骤
Jun 03 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
Jul 01 Python
python 列表推导式使用详解
Aug 29 Python
python求质数列表的例子
Nov 24 Python
Python3.9新特性详解
Oct 10 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
thinkphp的c方法使用示例
2014/02/24 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
javascript中this的四种用法
2015/05/11 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
python 查找字符串是否存在实例详解
2017/01/20 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
python语音识别实践之百度语音API
2018/08/30 Python
Python lambda表达式用法实例分析
2018/12/25 Python
python实现门限回归方式
2020/02/29 Python
区分python中的进程与线程
2020/08/13 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
汽车检测与维修个人求职信
2013/09/24 职场文书
金融专业个人的自我评价
2013/10/18 职场文书
应届毕业生求职信范例分享
2013/12/17 职场文书
老师给学生的表扬信
2014/01/17 职场文书
美术指导求职信
2014/03/17 职场文书
警示教育活动总结
2014/05/05 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
党员发展大会主持词
2015/07/03 职场文书
2015年三好一满意工作总结
2015/07/24 职场文书
教学反思怎么写
2016/02/24 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python