work

【Python与线程】

为君一笑 提交于 2019-11-27 20:44:19
" 目录 一、全局解释器锁GIL 二、Python线程模块的选择 三、线程的创建 三、锁机制 四、信号量 五、事件 六、条件 七、定时器 八、线程队列 九、线程池 补充:线程安全 import threading obj = threading.local()# local():可实现,多线程操作某一数据,不会出现数据混乱的情况# 原理:空间换时间 def add(i): obj.n = i print(i, obj.n, threading.current_thread().ident) for i in range(20): th = threading.Thread(target=add, args=(i,)) th.start() 一、全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中同时只有一个线程在执行。虽然Python解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行. 对于Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁保证了同一时刻只有一个线程在运行. 同一时间点,GIL只允许同一个进程中的一个线程访问cpu,即CPython解释器中没有真正的线程并行,只有进程可以实现。故I/O操作多时,使用多线程最好;计算密集时,使用多进程最好。 在多线程环境中

【Python与线程】

核能气质少年 提交于 2019-11-27 20:25:17
原文: http://blog.gqylpy.com/gqy/232 " 目录 一、全局解释器锁GIL 二、Python线程模块的选择 三、线程的创建 三、锁机制 四、信号量 五、事件 六、条件 七、定时器 八、线程队列 九、线程池 补充:线程安全 import threading obj = threading.local()# local():可实现,多线程操作某一数据,不会出现数据混乱的情况# 原理:空间换时间 def add(i): obj.n = i print(i, obj.n, threading.current_thread().ident) for i in range(20): th = threading.Thread(target=add, args=(i,)) th.start() 一、全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中同时只有一个线程在执行。虽然Python解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行. 对于Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁保证了同一时刻只有一个线程在运行. 同一时间点,GIL只允许同一个进程中的一个线程访问cpu,即CPython解释器中没有真正的线程并行,只有进程可以实现。故I

像计算机科学家一样思考python-第3章 函数

血红的双手。 提交于 2019-11-27 18:49:07
在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合。定义一个函数时,需要指定函数的名称并写下一系列程序语句。之后,就可以使用名称来“调用”这个函数 3.1 函数调用 一个函数调用的例子 >>> type(42) <class 'int'> 这个函数的名称是 type ,括号中的表达式我们称之为函数的参数。这个函数调用的结果是求得参数的类型。 我们通常说函数“接收”参数,并“返回”结果。这个结果也称为返回值 3.2 数学函数 Python 有一个数学计算模块,提供了大多数常用的数学函数。模块是指包含 一组相关的函数 的文件。 要想使用模块中的函数,需要先使用 import 语句将它导入运行环境 >>> import math 这个语句将会创建一个名为 math 的模块对象。如果显示这个对象,可以看到它的一些信息: >>> math <module 'math' (built-in)> 模块对象包含了该模块中定义的函数和变量。若要访问其中一个函数,需要同时指定模块名称和函数名称,用一个句点( . )分隔。这个格式称为句点表示法( dot notation ) >>> radians=0.7 >>> height=math.sin(radians) >>> height 0.644217687237691 3.3 组合 到现在为止,我们已经分别了解了程序的基本元素——变量

线程

拥有回忆 提交于 2019-11-27 16:46:40
一、什么是线程?   在传统的操作系统中,每个进程有一个地址空间,而且默认就是一个控制线程,进程只是用来把资源集中在一起,进程只是一个资源单位,线程是cpu的执行单位。   多线程就是一个进程中存在多个控制线程,多个控制线程共享一个进程的内存空间。 二、线程的创建开销小   创建进程的开销远大于线程,如果我们的软件是一个工厂,该工厂有多条流水线,流水线工作需要电源,电源只有一个(单核cpu),一个车间就是一个进程,一个车间至少一条流水线(一个进程至少一个线程),创建一个进程,就是创建一个车间(申请空间,在该空间内建至少一条流水线),而建线程,就只是在一个车间内造一条流水线,无需申请空间,所以创建开销小.   进程与进程之间是竞争关系,线程之间是协作关系,不同的进程是竞争关系,是不同程序员写的程序运行的,360把其他进程当作病毒干死,同一个进程的线程之间是合作关系,是同一个程序写的程序内开启动,迅雷内的线程是合作关系,不会自己干自己。 三、线程与进程的区别:   线程共享创建它的进程的地址空间; 进程有自己的地址空间。   线程可以直接访问其进程的数据段; 进程拥有自己父进程数据段的副本。   线程可以直接与其进程的其他线程通信; 进程必须使用进程间通信来与兄弟进程通信。   新线程很容易创建; 新流程需要重复父流程。   线程可以对同一进程的线程进行相当大的控制;

【Python与线程】 -- 2019-08-16 21:05:44

别说谁变了你拦得住时间么 提交于 2019-11-27 13:51:50
原文: http://blog.gqylpy.com/gqy/232 " 目录 一、全局解释器锁GIL 二、Python线程模块的选择 三、线程的创建 三、锁机制 四、信号量 五、事件 六、条件 七、定时器 八、线程队列 九、线程池 补充:线程安全 import threading obj = threading.local()# local():可实现,多线程操作某一数据,不会出现数据混乱的情况# 原理:空间换时间 def add(i): obj.n = i print(i, obj.n, threading.current_thread().ident) for i in range(20): th = threading.Thread(target=add, args=(i,)) th.start() 一、全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中同时只有一个线程在执行。虽然Python解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行. 对于Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁保证了同一时刻只有一个线程在运行. 同一时间点,GIL只允许同一个进程中的一个线程访问cpu,即CPython解释器中没有真正的线程并行,只有进程可以实现。故I

【Python与线程】 -- 2019-08-16 18:48:53

谁说胖子不能爱 提交于 2019-11-27 13:31:03
原文: http://blog.gqylpy.com/gqy/232 " 目录 一、全局解释器锁GIL 二、Python线程模块的选择 三、线程的创建 三、锁机制 四、信号量 五、事件 六、条件 七、定时器 八、线程队列 九、线程池 补充:线程安全 import threading obj = threading.local()# local():可实现,多线程操作某一数据,不会出现数据混乱的情况# 原理:空间换时间 def add(i): obj.n = i print(i, obj.n, threading.current_thread().ident) for i in range(20): th = threading.Thread(target=add, args=(i,)) th.start() 一、全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中同时只有一个线程在执行。虽然Python解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行. 对于Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁保证了同一时刻只有一个线程在运行. 同一时间点,GIL只允许同一个进程中的一个线程访问cpu,即CPython解释器中没有真正的线程并行,只有进程可以实现。故I

【Python与线程】 -- 2019-08-16 18:41:41

爷,独闯天下 提交于 2019-11-27 13:29:21
原文: http://blog.gqylpy.com/gqy/232 " 目录 一、全局解释器锁GIL 二、Python线程模块的选择 三、线程的创建 三、锁机制 四、信号量 五、事件 六、条件 七、定时器 八、线程队列 九、线程池 补充:线程安全 import threading obj = threading.local()# local():可实现,多线程操作某一数据,不会出现数据混乱的情况# 原理:空间换时间 def add(i): obj.n = i print(i, obj.n, threading.current_thread().ident) for i in range(20): th = threading.Thread(target=add, args=(i,)) th.start() 一、全局解释器锁GIL Python代码的执行由Python虚拟机(也叫解释器主循环)来控制。Python在设计之初就考虑到要在主循环中同时只有一个线程在执行。虽然Python解释器中可以“运行”多个线程,但在任意时刻只有一个线程在解释器中运行. 对于Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁保证了同一时刻只有一个线程在运行. 同一时间点,GIL只允许同一个进程中的一个线程访问cpu,即CPython解释器中没有真正的线程并行,只有进程可以实现。故I

svn无法cleanup常见解决方案

二次信任 提交于 2019-11-27 12:08:57
1.问题呈现:svn执行clean up命令时报“Previous operation has not finished; run 'cleanup' if it was interrupted”错误,如下图: 2.出现问题源: 本地.svn\wc.db数据库文件里面存储了svn的operation,表名是work_queue。 3.解决方案: (1)下载db管理工具sqlite3, 链接:https://pan.baidu.com/s/1G0qw8YDf2-qPT1ueY-03xw 密码:r1c7; (2)将sqlite3.exe放置到对应cleanup异常的svn项目下的.svn(此目录默认是隐藏的)目录下: (3)在.svn目录下shift+鼠标右键,当前位置打开命令: (4)执行输入sqlite3 wc.db: (5)输入 .table 查看所有表: (6)输入delete from work_queue; 删除WORK_QUEUE表: (7)测试cleanup: 来源: https://blog.csdn.net/zc520yzy/article/details/99671605

第四十八章:django restfrom work (1)

烂漫一生 提交于 2019-11-27 08:35:35
序列化基础 什么是序列化与反序列化 """序列化:对象转换为字符串用于传输反序列化:字符串转换为对象用于使用""" drf序列化与反序列化 """序列化:Model类对象转换为字符串用于传输反序列化:字符串转换为Model类对象用于使用""" Model类 创建数据库:终端 >: mysql -uroot -p密码>: create database 数据库名 charset=utf8 配置数据库:settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名', 'USER': 'root', 'PASSWORD': '密码' }} 修改操作数据库的模块:项目init文件 import pymysqlpymysql.install_as_MySQLdb() 创建model类:models.py from django.db import modelsclass User(models.Model): CHOICE_SEX = ( (0, '男'), (1, '女') ) name = models.CharField(max_length=32, verbose_name='姓名') password = models.CharField(max_length

网络编程GIL

孤人 提交于 2019-11-27 08:02:38
GIL全局解释器锁 """ In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. """ """ ps:python解释器有很多种 最常见的就是Cpython解释器 GIL本质也是一把互斥锁:将并发变成串行牺牲效率保证数据的安全 用来阻止同一个进程下的多个线程的同时执行(同一个进程内多个线程无法实现并行但是可以实现并发) python的多线程没法利用多核优势 是不是就是没有用了? GIL的存在是因为CPython解释器的内存管理不是线程安全的 垃圾回收机制 1.引用计数 2.标记清除 3.分代回收 研究python的多线程是否有用需要分情况讨论 四个任务 计算密集型的 10s 单核情况下 开线程更省资源 多核情况下 开进程 10s 开线程 40s 四个任务 IO密集型的 单核情况下 开线程更节省资源 多核情况下 开线程更节省资源 """ # 计算密集型# from