多线程
的限制以及多进程
中传递参数的方式?python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并非python的特性,他是只在Cpython解释器里引入的一个概念,而在其余的语言编写的解释器里就没有这个GIL例如:Jython。html
这个锁的意思是任一时间只能有一个线程运用解释器,跟单cpu跑多个程序一个意思,咱们都是轮着用的,这叫“并发”,不是“并行”。python
为何会有GIL?c++
多核CPU的出现,充分利用多核,采用多线程编程慢慢普及,难点就是线程之间数据的一致性和状态同步程序员
说到GIL解释器锁,咱们容易想到在多线程中共享全局变量的时候会有线程对全局变量进行的资源竞争,会对全局变量的修改产生不是咱们想要的结果,而那个时候咱们用到的是python中线程模块里面的互斥锁,哪样的话每次对全局变量进行操做的时候,只有一个线程可以拿到这个全局变量;看下面的代码:面试
import threading global_num = 0 def test1(): global global_num for i in range(1000000): global_num += 1 print("test1", global_num) def test2(): global global_num for i in range(1000000): global_num += 1 print("test2", global_num) t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) t1.start() t2.start()
接下来加入互斥锁sql
import threading import time global_num = 0 lock = threading.Lock() def test1(): global global_num lock.acquire() for i in range(1000000): global_num += 1 lock.release() print("test1", global_num) def test2(): global global_num lock.acquire() for i in range(1000000): global_num += 1 lock.release() print("test2", global_num) t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) start_time = time.time() t1.start() t2.start()
哪些状况适合用多线程呢:数据库
只要在进行耗时的IO操做的时候,能释放GIL,因此只要在IO密集型的代码里,用多线程就很合适django
哪些状况适合用多进程呢:编程
用于计算密集型,好比计算某一个文件夹的大小安全
多进程间同享数据
多进程间同享数据,可以运用multiprocession.Value和multiprocessing.Array
bool and a or b
至关于bool? a: b
>>> a = "first" >>> b = "second" >>> 1 and a or b # 输出内容为 'first' >>> 0 and a or b # 输出内容为 'second'
上述内容你应该能够理解,可是还存在一个问题,请看下面的代码
>>> a = "" >>> b = "second" >>> 1 and a or b # 输出内容为 'second'
由于 a 是一个空串,空串在一个布尔环境中被Python当作假值,这个表达式将“失败”,且返回 b 的值。
若是你不将它想象成象 bool ? a : b 同样的语法,而把它当作纯粹的布尔逻辑,这样的话就会获得正确的理解。
1 是真,a 是假,因此 1 and a 是假。假 or b 是b。
应该将 and-or 技巧封装成一个函数:
def choose(bool, a, b): return (bool and [a] or [b])[0]
由于 [a] 是一个非空列表,它永远不会为假。甚至 a 是 0 或 ” 或其它假值,列表[a]为真,由于它有一个元素。
PEP8 规范 官方文档:https://www.python.org/dev/peps/pep-0008/
PEP8中文翻译:http://www.cnblogs.com/ajianbeyourself/p/4377933.html
这个在于平时的积累的了
还有不少,本身去整理一下吧
ORM,全拼Object-Relation Mapping,意为对象-关系映射
实现了数据模型与数据库的解耦,经过简单的配置就能够轻松更换数据库,而不须要修改代码只须要面向对象编程
ORM操做本质上会根据对接的数据库引擎,翻译成对应的sql语句,
全部使用Django开发的项目无需关心程序底层使用的是MySql、Oracle、SQLite....,若是数据库迁移,只须要更换Django的数据库引擎便可。
她专科学历
27岁从零开始学习c,c++,python编程语言
29岁编写百例教程
30岁掌握10种编程语言,
用自学的经历告诉你,学编程就找梦想橡皮擦
欢迎关注她的公众号,搜索— 非本科程序员
序号 | 文章 |
---|---|
Python面试题No1 | Python基础面试,看这篇文章画重点吧 |
Python面试题No2 | Python面试快问快答,理论要的就是速度与精准 |
Python面试题No3 | 学习Python一年,基础忘记了,看看面试题回忆回议 |
Python面试题No4 | 去面试Python工程师,这几个基础问题必定要能回答 |
Python面试题No5 | 2019年,Python工程师必考的6个面试题 |
Python面试题No6 | 昨天去面试,这5个Python面试题都被考到了 |
Python面试题No7 | 周三面试Python开发,这几道Python面试题差点答错,Python面试题No7 |
Python面试题No8 | 面试Python工程师,这几道编码题有必要背背 |
Python面试题No9 | 又面试了Python爬虫工程师,碰到这么几道面试题 |
Python面试题No10 | 朋友去面试Python工程师,又带回来几道基础题 |
Python面试题No11 | 刚毕业去面试Python工程师,这几道题太难了 |
Python面试题No12 | 五一4天就背这些Python面试题了 |
Python面试题No13 | 大意了,这几道Python面试题没有答对 |
Python面试题No14 | 明天找python工做,看看这几道Python面试题吧 |
Python面试题No15 | 这几道Python面试题,稳准狠 |