python线程安全及多进程多线程实现方法详解
作者:DRQ丶 发布时间:2023-08-27 02:01:54
标签:python,线程,安全,多,进程
进程和线程的区别
进程是对运行时程序的封装,是系统资源调度和分配的基本单位
线程是进程的子任务,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()
来源:https://www.cnblogs.com/dairuiquan/p/11594022.html
0
投稿
猜你喜欢
- 本文实例讲述了python使用BeautifulSoup分析网页信息的方法。分享给大家供大家参考。具体如下:这段python代码查找网页上的
- 这篇文章主要介绍了python智联招聘爬虫并导入到excel代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 简介观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。适用场景类似触发钩子事件,可
- 一、特效预览处理前处理后细节放大后二、程序原理1.输入你想隐藏的文字2.然后写到另一张跟照片同等大小的空白纸张上3.将相同位置的文字的颜色用
- 前言博主学习python有个几年了,对于python的掌握越来越深,很多时候,希望自己能掌握python越来越多的知识,但是,也意识很多时候
- 本文实例讲述了python中enumerate() 与zip()函数的使用比较。分享给大家供大家参考,具体如下:enumerate() 与z
- 大家都知道当任务过多,任务量过大时如果想提高效率的一个最简单的方法就是用多线程去处理,比如爬取上万个网页中的特定数据,以及将爬取数据和清洗数
- 案例故事:大部分带彩色屏幕的终端设备,不管是手机,车机,电视等等,都需要涉及图片的显示,作为一名专业的多媒体测试人员,我们需要一堆的规范化标
- 5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别。URL和路由5.0的URL访问不再支持普通URL模式,
- 什么是EfficientNet模型2019年,谷歌新出EfficientNet,在其它网络的基础上,大幅度的缩小了参数的同时提高了预测准确度
- 本文实例讲述了Python设计模式之观察者模式。分享给大家供大家参考,具体如下:观察者模式是一个软件设计模式,一个主题对象包涵一系列依赖他的
- 以前把守护进程与后台任务搞混了,后面看了文章才知道这两者的区别,写此文表达自己对守护进程的理解.1:什么是守护进程?所谓守护进程是一种是 L
- 移动互联网被称为“第五次科技革命”,而随着iPhone和Android等智能手机的日渐流行和iPad等平板电脑的出现,移动互联网的潜力和趋势
- 本文实例讲述了Python微信企业号文本消息推送功能。分享给大家供大家参考,具体如下:企业号的创建、企业号应用的创建、组、tag、part就
- 前言之前实践了下face++在线人脸识别版本,这回做一下离线版本。github 上面有关于face_recognition的相关资料,本人只
- 基于Python2.7的版本环境,Python实现的数据库跨服务器(跨库)迁移, 每以5000条一查询一提交,代码中可以自行更改
- itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。开源地址https://github.com/littleco
- 共4个页面:form.asp; chk.asp; num.asp; count.asp,得到一个随即数字。加密解密后成成XBM图片,利用 s
- 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。闲来无事听听歌,听
- 本文实例为大家分享了PyQt5实现简单数据标注工具的具体代码,分类用,供大家参考,具体内容如下第一个最大的图片是当前要标注的类别,接下来的两