- 博客(11)
- 收藏
- 关注
原创 对于python中GIL的理解
一.什么是GILGIL(Global Interpreter Lock)意为全局解释器锁。在这里先要明确几点:1.python是解释型语言,也即什么时候需要用什么时候用解释器将其编译成机器语言,因此一行python如果要被执行成功是需要解释器的。2.python常用的解释器为cpython(使用c语言编写),但不代表python只有这一种解释器,还有jpython(使用java编写)等等。3.但是在最早使用的python解释器是cpython,因此在之后社区中的大部分模块都是基于cpytho
2021-12-03 16:14:28
575
原创 http中长连接与短连接的区别,和实现方式。
一.短连接:在每次获取数据时,客户端都会与服务器进行三次握手建立连接,接受完数据以后再四次挥手断开连接。即每次客户端获取数据,服务器都会指派一个新的socket套接字来为客户端服务。二.长连接:在客户端与服务器三次握手建立连接以后,客户端的每次接受数据都建立在这一个连接上,也即客户端每次获取数据对服务器而言都是用同一个套接字为其服务的。直到客户端获取结束以后再四次挥手断开连接。三.长连接与短连接的区别1.短链接http协议为http1.0,长连接的http协议为1.12.短连接由于是每次用新
2021-11-22 18:31:25
2830
原创 使用多进程,多线程与协程实现并发web服务器
由于进程,线程与协程的资源占用是不同的,因此协程能够承受的最大客户端链接数是最多的。在本次课程中学到的知识:1.正则表达式中[^]表示匹配取反的字符。2.面对打开文件的操作时,很可能会遇到问题,因此使用try except else的方式来编写代码。3.http客户端在访问服务器,服务器在返回客户端时发送的数据都是以header 空一排 body组成的,空行就是用来区分头和身体的。4.404码表示未能在服务器中找到对应资源。5.splitlines函数可以将多行字符串切割成列表6
2021-11-22 15:38:55
732
原创 简易图片下载器
import urllib.requestimport geventfrom gevent import monkeymonkey.patch_all()def downloader(img_name, img_url): req = urllib.request.urlopen(img_url) content = req.read() with open(img_name, "wb") as f: f.write(content)def main.
2021-11-19 15:09:57
94
原创 什么是迭代器?迭代是如何完成的?
class info(object): def __init__(self): self.name = list() self.age = list() self.current_num = 0 def add(self, name, age): self.name.append(name) self.age.append(age) def __iter__(self): return .
2021-11-18 17:11:22
211
原创 多进程拷贝文件夹
# 制作一个可以复制文件的程序import multiprocessingimport osdef copydir(queue_show, filename, old_dir_name, new_dir_name): # 打开原来的文件 old_f = open(old_dir_name + "/" + filename, "rb") # 读取内容 content = old_f.read() old_f.close() # 打开新文件 ne.
2021-11-18 13:19:09
287
原创 进程同步,互斥锁与死锁的解决方法
什么是进程同步?python中当多个线程都需要修改全局变量时或者说多个线程都需要使用某个资源时会面临资源竞争的问题,如何解决资源竞争问题则需要引入进程同步的概念。所谓的进程同步就是保证多个线程安全访问同一资源。互斥锁是什么?达到进程同步的一种办法就是引入互斥锁,就是在某线程使用全局资源时将该资源锁定,其他线程不能更改。直到该线程使用完成后,将该资源释放,其他线程才能继续更改该资源。互斥锁保证同一时间只有一个线程使用该资源,这就保证了多线程可以安全访问统一资源。死锁是什么?现有资源A 资源
2021-11-18 10:24:16
415
原创 线程,进程与协程的区别与联系
什么是进程?在linux中,进程是一段运行中的程序。它是由代码和系统分配的资源组成的。每个进程都会获得系统分配的独立地址空间,进程之间想要实现通信需要借助队列,文件,套接字等方式。什么是线程?而线程则是运算调度的最小单位,负责执行进程中的每一个任务。在一个进程中可以包含一个或者多个线程,可以说线程才是实现代码的实际运作单位。进程与线程的区别与联系:1.一个进程中可以有一个或者多个线程,而一个线程则只属于一个进程。2.线程没有独立的地址空间,它是包含在进程的地址空间内的。3.线程的
2021-11-18 10:02:35
145
原创 进程间通信:消息队列queue(multiprocessing.Queue模块的使用坑点)
同一进程中的多线程间进行资源共享可以通过全局变量来实现,但是不同的进程使用不同区域的内存,则需要消息队列来通信,不同服务器上的进程想要通信则可以使用redis。消息队列queue有三张模式:1、pythonqueue模块的FIFO队列先进先出。2、LIFO类似于堆先进后出。3、优先级队列级别越低越先出来。消息队列的一个好处就是可以降低消息队列的耦合性。消息队列的创建q = multiprocessing.Queue(n) 其中n为这个消息队列最多可以储存的消息数量向消息队列中...
2021-11-17 17:19:11
1515
原创 关于map,reduce,filter函数的使用学习
import functoolslist2 = [1, 2, 3, 4, 5]list3 = [1, 2, 3, 4, 5]list4 = [1, 2, 3, 4, 5]# map 用来对数列中每个对象执行函数def map_test(a): return a * 3# reduce 对序列中的对象做操作并把返回值作为下一次操作的第一个参数,序列中下一个对象为第二个参数def reduce_test(a, b): return a * b# filter 用于过滤序列,并返.
2021-11-17 11:42:46
71
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人