python多线程

Node-1.高性能服务器

寵の児 提交于 2020-03-10 03:30:46
文章目录 Node——高性能服务器 异步I/O与非阻塞I/O Nodejs的异步I/O 事件循环机制 Node与其他服务器比较 Node——高性能服务器 浏览器中JavaScript在单线程上执行,而且与UI渲染共享同一个线程,所以JavaScript在执行的时候UI渲染和响应是处于停滞状态的。如果网页获取资源时同步获取,那么会阻塞页面的其他操作,不能响应用户的交互行为,影响用户体验。 那Nodejs怎么解决性能上的问题?基于事件的非阻塞异步I/O ! 通过事件驱动节省为每个请求创建额外线程和切换线程的开销,使得服务器可以在大量连接的情况下也有条不紊地处理请求,非阻塞的设置让它可以更好地提升响应吞吐,使Nodejs构建了一套完善的 高性能 异步I/O框架。 异步I/O与非阻塞I/O 说到Node的经常会听到异步、非阻塞、回调、事件这些词语。实际上,异步和非阻塞都达到了并行I/O的目的,但是从计算机内核I/O而言,异步/同步和阻塞/非阻塞实际上是两回事。 操作系统内核对于I/O只有两种方式:阻塞与非阻塞。 阻塞I/O: 系统内核调用后一定要等系统内核层面完成所有操作后,调用才结束。 阻塞I/O造成CPU等待I/O,浪费等待时间,CPU的处理能力不能得到充分利用。如读取磁盘上的文件,系统内核在完成磁盘寻道、读取数据、复制数据到内存后,这个调用才结束。 非阻塞I/O:

线程的启动和终止

拥有回忆 提交于 2020-03-08 20:03:34
python中的进程和线程 进程:资源的容器,会启动一个解释器进程,里面跑你的程序,多线程共享同一个解释器进程 线程:干活的 python的线程开发 使用标准库threading 我们来敲一个小demo来测试一下什么是多线程编程 import threading import time def worker ( ) : count = 0 while True : print ( "I am working" ) count += 1 if count > 10 : break t = threading . Thread ( target = worker ) # 创建新的线程 t . start ( ) print ( "====fin====" ) 返回结果 我们来对比一下以下代码 import threading import time def worker ( ) : count = 0 while True : print ( "I am working" ) count += 1 if count > 10 : break t = threading . Thread ( target = worker ) # 创建新的线程 if __name__ == "__main__" : print ( "====fin====" ) t . start ( ) 返回结果

Python-多线程

只愿长相守 提交于 2020-03-08 04:35:50
导入包 import threading 定义多线程: 线程1=threading . Thread(target=函数名,name = ‘线程名字’,arsg=(参数1,参数2))- 启动线程: 线程1.start() def job1 ( ) : print ( 'T1 start\n' ) for i in range ( 10 ) : time . sleep ( 0.1 ) print ( 'T1 finish\n' ) def main ( ) : thread_job1 = threading . Thread ( target = job1 , name = 'T1' ) #创建一个多线程 thread_job1 . start ( ) #激活一个多线 print ( threading . active_count ( ) ) #线程的数量 print ( '*' * 59 ) print ( threading . enumerate ( ) ) print ( '*' * 59 ) print ( threading . current_thread ( ) ) #运行的是哪个线程 #结果 T1 start 3 ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **

python之线程池

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-07 07:48:05
#!/user/bin/evn python # -*- coding:utf-8 -*- import threading import queue,time ''' 线程池的思路: 将任务依次放在队列里面 然后从队列取出任务交给线程执行 ''' stopEvent=object()#任务完了的标志---下面我们将任务包封装到元组中 class ThreadPool(object): def __init__(self,max_num): #创建队列 self.q=queue.Queue() #创建线程最大的数量(线程池的最大容量) self.max_num=max_num #空闲线程列表(数量) self.free_list=[] #真实创建的线程列表(数量) self.gemerate_list=[] #中断任务标志 self.terminal=False self.num=0 def run(self,func,args,callback=None): #func:任务函数 #args:任务函数的参数 #callback:线程执行成功或者失败后执行的回调函数 task=(func,args,callback)#将任务封装到元组中 ==任务包 #将任务包放到队列中 self.q.put(task) #创建线程 if len(self.free_list)==0 and len

如何编写线程安全但可伸缩的类

落花浮王杯 提交于 2020-03-06 16:41:19
编写线程安全类时,主要问题是将数据分为多个独立的部分,并为这些部分选择合适的大小。如果部分太小,则我们的类不是线程安全的。如果部件太大,则该类不可扩展。 让我们看一个进一步说明这种情况的示例: 一个例子 假设我们要跟踪一个城市中有多少人。我们要支持两种方法,一种是获取当前居住在城市中的人数,另一种是将一个人从一个城市转移到另一个城市。因此,我们有以下界面: 由于我们要从多个线程并行使用此接口,因此必须选择实现此接口的选项。使用该类 java.util.concurrent. ConcurrentHashMap 或使用该类 java.util.HashMap 和一个锁。这是使用类的实现 java.util.concurrent.ConcurrentHashMap : 方法移动使用线程安全方法计算来减少源城市中的计数。然后,使用计算来增加目标城市中的计数。count方法使用线程安全方法 get 。 这是使用该类的实现 java.util.HashMap : 该方法 move 还使用该方法 compute 来增加和减少源城市和目标城市中的计数。仅在这一次,因为该 compute 方法不是线程安全的,所以两个方法都被同步块包围。该 count 方法 get 再次使用被同步块包围的方法。 两种解决方案都是线程安全的。 但是在使用的解决方案中 ConcurrentHashMap

python多线程使用

耗尽温柔 提交于 2020-03-05 16:55:42
python多线程:先举个例子 #coding=utf-8 import threading from time import ctime,sleep def music(func): for i in range(2): print "I was listening to %s. %s" %(func,ctime()) sleep(1) def move(func): for i in range(2): print "I was at the %s! %s" %(func,ctime()) sleep(5) threads = [] t1 = threading.Thread(target=music,args=(u'爱情买卖',)) threads.append(t1) t2 = threading.Thread(target=move,args=(u'阿凡达',)) threads.append(t2) if __name__ == '__main__': for t in threads: t.setDaemon(True) t.start() t.join() print "all over %s" %ctime()    import threading 首先导入threading 模块,这是使用多线程的前提。 threads = [] t1 = threading

网络编程py

徘徊边缘 提交于 2020-03-05 15:13:10
概念 day27 ​ 网络架构 ​ C/S :qq 微信 浏览器 英雄联盟 穿越火线 王者荣耀 安装 ​ C:client 客户端 ​ S:server 服务端 ​ B/S :百度 淘宝 码云 只要在浏览器输入网址就可以直接使用了 ​ B:browser 浏览器 ​ S:server 服务端 ​ B/S更好: 更节省资源 不用更新 不依赖环境 ​ 统一了所有web程序的入口 ​ C/S架构: 安全性 程序比较庞大 ​ 移动端 ​ app ​ 微信小程序 : 统一了所有web程序的入口 ​ 支付宝 : 统一了所有和钱相关的事儿 ​ mac ​ 是一个物理地址 ​ 唯一的标识你的网络设备 ​ ip 地址 ​ 是一个逻辑地址 ​ 是可以根据你的位置变化发生改变的 ​ 能够在广域网中快速的定位你 ​ ipv4地址: ​ 4为点分十进制 ​ 0.0.0.0-255.255.255.255 ​ 2**32 ​ 公网和内网: ​ 公网 0.0.0.0-255.255.255.255(不包含保留字段的ip) 你能够在任意一 个地方去访问的ip地址 ​ 内网 所有的内网ip都要使用保留字段 只能在一个区域内使用,出了 这个区域就用不了了 192.168.0.0 - 192.168.255.255 10.0.0.0 - 10.255.255.255 172.16.0.0 - 172.32.255

python3 进程和线程(一)

你说的曾经没有我的故事 提交于 2020-03-04 10:05:10
进程和线程 进程:内存独立,线程共享同一进程的内存,一个进程就像一个应用程序,例如qq和word,这属于两个进程, 进程是资源的集合,线程是执行单位 进程之间不能直接互相访问,同一进程中的程可以互相通信 创建新进程消耗系统资源,线程非常轻量,只保存线程运行时的必要数据,如上下文、程序堆栈信息 同一进程里的线程可以相互控制,父进程可以控制子进程 1 import threading 2 import time 3 4 def sayhi(num): 5 print('num:',num) 6 time.sleep(3) 7 8 a = threading.Thread(target=sayhi,args=(1,)) 9 b = threading.Thread(target=sayhi,args=(2,)) 10 now1 = time.time() 11 print(now1) 12 a.start() 13 b.start() 14 now2 = time.time() 15 print(now2) 16 print(threading.active_count()) 17 # 包含主线程,总共3个 18 print(a.getName()) 19 print(b.getName()) 20 21 class MyThread(threading.Thread): 22 def

java技能提升计划

让人想犯罪 __ 提交于 2020-03-03 07:14:19
近日向领导汇报工作时,发现自己工作两年多来,在技能提升方面,始终是基于需求驱动,自主学习的觉悟比较不足,于是在网上搜索汇总得到以下java技能提升的一些知识点,粗略扫了一遍,发现一知半解甚至没有接触过的内容比较多,始知自身所掌握之局限。便开通了这个CSDN账号,计划在日后工作之余,有选择地研究下面的一些重要知识点。每次学习所得的内容,我会另开文章记录学习过程中的思考、疑惑、结论等,供自己日后回顾,若能惠及他人,也是我的荣幸。希望能够坚持下去。 一、基础篇 面向对象 什么是面向对象 面向对象、面向过程 面向对象的三大基本特征和五大基本原则 平台无关性 Java如何实现的平台无关 JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala) 值传递 值传递、引用传递 为什么说Java中只有值传递 封装、继承、多态 什么是多态、方法重写与重载 Java的继承与实现 构造函数与默认构造函数 类变量、成员变量和局部变量 成员变量和方法作用域 Java基础知识 基本数据类型 7种基本数据类型:整型、浮点型、布尔型、字符型 整型中byte、short、int、long的取值范围 什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额? 自动拆装箱 什么是包装类型、什么是基本类型、什么是自动拆装箱 Integer的缓存机制 String 字符串的不可变性 JDK

time.sleep —休眠线程或进程?

元气小坏坏 提交于 2020-03-02 18:30:44
在Python for * nix中, time.sleep() 阻塞线程或进程? #1楼 只有线程,除非您的进程具有单个线程。 #2楼 进程本身无法运行。 关于执行,进程只是线程的容器。 这意味着您根本无法暂停该过程。 它根本不适用于过程。 #3楼 只是线程。 #4楼 它只会休眠线程,除非您的应用程序只有一个线程,在这种情况下,它将休眠线程并有效地进程。 睡眠中的python文档未指定此内容,因此我当然可以理解混淆! http://docs.python.org/2/library/time.html #5楼 该线程将阻塞,但是该进程仍然有效。 在单线程应用程序中,这意味着您在睡眠时一切都被阻止了。 在多线程应用程序中,只有您显式“睡眠”的线程将被阻塞,其他线程仍在进程中运行。 来源: oschina 链接: https://my.oschina.net/u/3797416/blog/3185329