python 多线程伪_Python每日3题什么是死锁?
- 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道。
- 每日3题,100天之后成为大牛!
- 如果有不明白的,给麦叔留言。
[Easy] python中进程与线程的使用场景?
思考30秒再往下翻...
多进程适合在CPU密集操作(cpu操作指令比较多,如位多的的浮点运算)。
多线程适合在IO密性型操作(读写数据操作比多的的,比如爬虫)
[Normal] 什么是死锁?
思考30秒再往下翻...
若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,互相干等着,程序无法执行下去,这就是死锁。
GIL锁 全局解释器锁
作用:限制多线程同时执行,保证同一时间只有一个线程执行,所以cython里的多线程其实是伪多线程!
所以python里常常使用协程技术来代替多线程,协程是一种更轻量级的线程。
进程和线程的切换时由系统决定,而协程由我们程序员自己决定,而模块gevent下切换是遇到了耗时操作时才会切换
三者的关系:进程里有线程,线程里有协程。
下面的例子,程序会永远卡在那里
from threading import Threadfrom threading import Lockimport time
lock1 = Lock()lock2 = Lock()
def work1(num): lock1.acquire() # lock1上锁 time.sleep(1) print("in work1") lock2.acquire() # lock2上锁 print("work1-----") lock2.release() # lock2解锁 lock1.release() # lock1解锁
def work2(num): lock2.acquire() # lock2加锁 print("in work2") lock1.acquire() # lock1加锁 print("work1-----") lock1.release() # lock1解锁 lock2.release() # lock2解锁
if __name__ == '__main__': t1 = Thread(target=work1,args=(1000000,)) t2 = Thread(target=work2, args=(1000000,)) t1.start() t2.start()
[Hard] Session,Cookie,JWT的理解
思考30秒再往下翻...
为什么要使用会话管理
众所周知,HTTP协议是一个无状态的协议,也就是说每个请求都是一个独立的请求,请求与请求之间并无关系。但在实际的应用场景,这种方式并不能满足我们的需求。举个大家都喜欢用的例子,把商品加入购物车,单独考虑这个请求,服务端并不知道这个商品是谁的,应该加入谁的购物车?因此这个请求的上下文环境实际上应该包含用户的相关信息,在每次用户发出请求时把这一小部分额外信息,也做为请求的一部分,这样服务端就可以根据上下文中的信息,针对具体的用户进行操作。所以这几种技术的出现都是对HTTP协议的一个补充,使得我们可以用HTTP协议+状态管理构建一个的面向用户的WEB应用。
Session 和Cookie的区别
这里我想先谈谈session与cookies,因为这两个技术是作为开发最为常见的。那么session与cookies的区别是什么?个人认为session与cookies最核心区别在于额外信息由谁来维护。利用cookies来实现会话管理时,用户的相关信息或者其他我们想要保持在每个请求中的信息,都是放在cookies中,而cookies是由客户端来保存,每当客户端发出新请求时,就会稍带上cookies,服务端会根据其中的信息进行操作。当利用session来进行会话管理时,客户端实际上只存了一个由服务端发送的session_id,而由这个session_id,可以在服务端还原出所需要的所有状态信息,从这里可以看出这部分信息是由服务端来维护的。
除此以外,session与cookies都有一些自己的缺点:
cookies的安全性不好,攻击者可以通过获取本地cookies进行欺骗或者利用cookies进行CSRF攻击。使用cookies时,在多个域名下,会存在跨域问题。session 在一定的时间里,需要存放在服务端,因此当拥有大量用户时,也会大幅度降低服务端的性能,当有多台机器时,如何共享session也会是一个问题.(redis集群)也就是说,用户第一个访问的时候是服务器A,而第二个请求被转发给了服务器B,那服务器B如何得知其状态。实际上,session与cookies是有联系的,比如我们可以把session_id存放在cookies中的。
JWT是如何工作的
首先用户发出登录请求,服务端根据用户的登录请求进行匹配,如果匹配成功,将相关的信息放入payload中,利用算法,加上服务端的密钥生成token,这里需要注意的是secret_key很重要,如果这个泄露的话,客户端就可以随机篡改发送的额外信息,它是信息完整性的保证。生成token后服务端将其返回给客户端,客户端可以在下次请求时,将token一起交给服务端,一般是说我们可以将其放在Authorization首部中,这样也就可以避免跨域问题。
支持麦叔,请点在看,谢谢!
python 多线程伪_Python每日3题什么是死锁?相关推荐
- python函数名字_Python每日3题-为什么函数名字可以当做参数用?
每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道. 每日3题,100天之后成为大牛! 如果有不明白的,给麦叔留言. [Easy] 为什么函数名字可以当做参数用? 思考30秒再往 ...
- python每日一题今天的答案_python每日一题总结1
每日一题1 1. 写出python中import 导入库的几种常见写法 举例:import math from math imourt sqrt 每日一题2 1. print 1000L 的结果 答 ...
- python每日一题公众号_python每日一题总结4
20180609 qzd 每日一题14 输入三个整数x,y,z,请把这三个数由小到大输出. my code x=int(input('x:')) y=int(input('y:')) z=int(in ...
- python读取7个数(1-50)的整数值_python每日一题总结7
20180618 qzd 总结:全 每日一题23 读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*. my code: for i in range(7): n=int(input ...
- python多线程编程_python多线程编程(1): python对多线程的支持
前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...
- python多线程挂了_python多线程输入的问题 python高效编程技巧13(如何在线程之间实现...
python3 创建线程时不用args传参,执行线程时为什如果创建线程时在target里就传入了参数,为什么在启动线程时,线程不是在Python多线程下,每个线程的执行方式: 有什么了不起,大不了继续 ...
- python多线程输出_Python多线程
多线程基础概念 并行与并发 并行:同时处理多个任务,必须在多核环境下 一段时间内同时处理多个任务,单核也可以并发 并发手段 线程:内核空间的调度 进程:内核空间的调度 协程:用户空间的调度 线程可以允 ...
- python 多线程 模块_Python多线程threading和multiprocessing模块实例解析
本文研究的主要是Python多线程threading和multiprocessing模块的相关内容,具体介绍如下. 线程是一个进程的实体,是由表示程序运行状态的寄存器(如程序计数器.栈指针)以及堆栈组 ...
- python多线程执行_python多线程实现同时执行两个while循环
如果想同时执行两个while True循环,可以使用多线程threading来实现. 完整代码 #coding=gbk from time import sleep, ctime import thr ...
- python多线程扫描_Python多线程扫描端口代码示例
本文代码实现Python多线程扫描端口,具体实现代码如下. #coding:utf-8 import socket import thread import time socket.setdefaul ...
最新文章
- LINUX中断学习笔记【转】
- Cloud Native Computing Foundation Welcomes the NATS Messaging Protocol into the Fold
- 51nod 1087 1 10 100 1000
- mybatisplus查询今天的数据_MybatisPlus(CRUD)
- java for loop_Java for循环执行了两次
- PHP抽象类abstract关键字
- 使用Certbot 生成 https 证书
- 多路平衡查找树(B Tree)(分裂、合并)
- java.lang.NoSuchMethodError: org.apache.flink.table.api.TableColumn.isGenerated()Z
- 【线性代数公开课MIT Linear Algebra】 第十八课 行列式的性质
- android OpenGL ES实现渲染到透明的纹理 render to transparent texture
- python代替shell脚本_自动化shell脚本except与python的pexpect模块
- oracle中主键自增长,Oracle中给主键设置自增长
- 浏览器transform介绍
- vue2快速生成代码片段
- cocos2dx.3.17中用VS2017启动本地windows调试器出现脚本错误解决办法
- 2013-1-20·
- Microsoft Edge浏览器网页改为纯黑色(将浏览器网页底色改为黑色)
- nb 底特律 外包公司,招人,
- Android 开发 | App 工程目录结构
热门文章
- rsync增量同步标志位详细解释
- Could not get unknown property 'packageForR' for task ':app:processDebugReso
- mongoose 常用数据库操作 更新
- debug [LTS]
- 内部排序算法(Golang版本)
- ASP.Net中防止页面刷新重复提交的几种方法
- 如何删除PeopleSoft Process Definition
- ActiveMQ(四)——异步发消息、异步消费消息与prefetchSize之间的关系
- Spring框架入门程序:获取Bean的三种方式
- Tomcat配置虚拟路径使上传文件和服务器分离及上传文件