多进程

多进程

若如初见. 提交于 2019-12-05 01:01:09
import multiprocessing,timedef down_load(): time.sleep(5) print("运行完了")if __name__ == '__main__': for i in range(5): p = multiprocessing.Process(target=down_load) p.start() while len(multiprocessing.active_children())!=0:#等待子进程结束 pass # print(multiprocessing.active_children()) print(multiprocessing.current_process()) print('end') 来源: https://www.cnblogs.com/lapt/p/11893332.html

并发网络通信-多进程

旧巷老猫 提交于 2019-12-04 23:42:27
多进程 """ 多进程网络并发编程 TCP """ from socket import * import os, signal signal.signal(signal.SIGCHLD, signal.SIG_IGN)# 处理僵尸进程 def handle(cf):# 客户专用套接字处理客户信息(cf本身已经内涵客户端IP) while True: try: data = cf.recv(1024) except: continue if not data: break print(data.decode()) cf.send(b'ok') cf.close() HOST = '0.0.0.0' PORT = 8888 ADDR = (HOST, PORT) f = socket()# 建立套接字,绑定服务器ip port listen f.setsockopt(SOL_SOCKET, SO_REUSEADDR, True) f.bind(ADDR) f.listen(5) print('listen the port 8888...') while True: try: cf, addr = f.accept() print('connect from ', addr) except KeyboardInterrupt: os._exit(0) except Exception

关于Apache与Nginx的优势比较

萝らか妹 提交于 2019-12-04 22:14:07
http://www.php100.com/html/itnews/PHPxinwen/2012/0103/9606.html 不断有人跟我说Nginx比Apache好、比Apache快之类。Nginx更主要是作为反向代理,而非Web服务器使用。我翻译过一本关于反向代理的技术书籍,同时精通Apache API开发,对Nginx和Apache的工作原理都略有了解,粗谈一下看法。   不管是Nginx还是Squid这种反向代理,其网络模式都是事件驱动。事件驱动其实是很老的技术,早期的select、poll都是如此。后来基于内核通知的更高级事件机制出现,如libevent里的epoll,使事件驱动性能得以提高。事件驱动的本质还是IO事件,应用程序在多个IO句柄间快速切换,实现所谓的异步IO。事件驱动服务器,最适合做的就是这种IO密集型工作,如反向代理,它在客户端与WEB服务器之间起一个数据中转作用,纯粹是IO操作,自身并不涉及到复杂计算。反向代理用事件驱动来做,显然更好,一个工作进程就可以run了,没有进程、线程管理的开销,CPU、内存消耗都小。   所以Nginx、Squid都是这样做的。当然,Nginx也可以是多进程 + 事件驱动的模式,几个进程跑libevent,不需要Apache那样动辄数百的进程数。Nginx处理静态文件效果也很好,那是因为静态文件本身也是磁盘IO操作

Python之多进程多线程

瘦欲@ 提交于 2019-12-04 22:08:48
进程是多个资源的集合 线程就是进程里面具体干活的 线程和线程之间是相互独立的 多线程:适用于IO密集型任务 多进程:适用于CPU密集型任务 一、多线程 线程需要使用threading模块 启动线程的方法: threading.Thread(target=XXX,args=('xxx','xxx')) #target接的是函数名,args接的是传递的参数,如果只有一个参数要这么写args=('xxx',) 通过threading.Thread实例出来的线程都是子线程,只有最先开始的一个线程是主线程 写一个简单的多线程 import threading def down_load(): time.sleep(1) print('运行完了') for i in range(5): #循环5次,即启动5个线程 t=threading.Thread(target=down_load) #实例化一个线程 t.start() #启动线程 print(threading.active_count()) #查看当前线个程数 print(threading.current_thread())#查看当前线程 如果说我现在想看一下启动的线程全部执行完要多久,这就涉及到线程等待,线程等待是用join,使用jion会比较麻烦,可以用一个while循环的方式来处理。 import threading

Python:多进程。

只谈情不闲聊 提交于 2019-12-04 20:10:15
参考: https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064 Python程序实现多进程(multiprocessing) 了解linux的Fork系统调用 (wiki) 在 计算机 领域中,尤其是 Unix 及 类Unix系统 操作系统中, fork (进程复制)是一种创建自身 行程 副本的操作。它通常是 内核 实现的一种 系统调用 。Fork是类Unix操作系统上创建进程的一种主要方法,甚至历史上是唯一方法。 在多任务操作系统中, 行程 (运行的程序)需要一种方法来创建新进程,例如运行其他程序。 如果进程需要启动另一个程序的可执行文件,它需要先Fork来创建一个自身的副本。然后由该副本即“ 子进程 ”调用 exec 系统调用,用其他程序覆盖自身:停止执行自己之前的程序并执行其他程序。 当一个进程调用fork时,它被认为是 父进程 ,新创建的进程是它的孩子(子进程)。在fork之后,两个进程不仅运行着相同的程序,并且它们恢复执行(好像它们都已被系统调用)both processes not only run the same program, but they resume execution as though both had called the system call.

Python高性能编程

北战南征 提交于 2019-12-04 15:49:35
前言 python现在已经被广泛使用了,它效率高,平常做一些简单的实验,处理一些数据都可以使用python。 我写这篇文章的目的,是想和大家分享下提升python性能的小技巧,这些技巧在工作和学习中算是非常实用了。接下来文字和简明扼要,直接告诉大家如何高性能使用python,不会涉及到基础知识没比如元组和列表的区别等,需要读者有一定的python基础和算法基础。 列表和元组的选择 他俩的区别我就不再赘述,就使用情况来看,列表是动态的,元组是静态的,想必大家都很喜欢使用列表吧。 但是因为列表的超额分配,列表会占用额外的内存的空间,而且初始化列表的时间大约是初始化元组的5倍,因此给大家的建议是, 凡是需要存储不会改变的事物,就是用元组吧 ,或者是说只要在适用的情况下,能用元组就用元组。 迭代器和生成器 迭代器和生成器算是python的一大特色了,迭代器和生成器可以简单理解为,需要迭代的内容不需要全部在内存中,只有在迭代完一个的时候才去生成另外一个。所以,迭代器和生成器一大好处就是节省内存。举个例子,统计10GB文本中单词的个数,显然不能把10GB文件都读到内存中,那么我们可以写如下代码: with open("test.txt","r") as fr: # 千万不要写成 data = fr.readlines(),这样就全部读到内存中了 for line in fr: pass #

day1 初识Nginx

可紊 提交于 2019-12-04 14:31:11
一. Nginx的诞生 Nginx是一个高效的web及反向代理服务器,它的第一版发布于2012年,晚于如今占据最大市场份额的Apache。那么Nginx的诞生肩负了哪些使命呢?或者说它于Apache的差别在哪里? 低效的Apache!Apahce诞生于上世纪90年代。那个时候硬件技术还不是很成熟,服务器大多是单核单cpu的,而且网络请求数也不是很多。和大多数那个年代诞生的组件一样,Apache的底层采用的是同步多进程的模型。如今服务器向着多核多cpu发展,处理的网络请求也动辄十万级 百万级,尤其是物联网的诞生,以亿为单位的qps也出现在大家的视野中。在这样的场景下,Apache低效的底层模型就无法应对了。一个服务器能开启的进程数是有限的,而且操作系统在多个进程之间的切换也会消耗大量的资源和时间,导致Apache无法跑满多核cpu的性能。 高效的Nginx!Nginx的底层采用了多路复用的技术,轻松应对百万级的连接。如果说同步 多进程代表着低效,那么异步 多路复用就是高性能的代名词了。Nginx可以在一个线程中处理多个请求,避免了进程、线程间的切换,在用户态中实现并发的处理。而且Nginx几乎是由纯C语言开发的,也是其的运行效率大大提升。 比较一下Apache和Nginx,Nginx用户如下几个优点:1. 高并发,高性能;2. 可扩展性好(拥有丰富的模块);3. 高可靠性;4.

Nginx 的进程结构,你明白吗?

♀尐吖头ヾ 提交于 2019-12-04 07:26:55
Nginx 进程结构 这篇文章我们来看下 Nginx 的进程结构,Nginx 其实有两种进程结构: 单进程结构 多进程结构 单进程结构实际上不适用于生产环境,只适合我们做开发调试使用。因为在生产环境中我们必须保持 Nginx 足够健壮以及 Nginx 可以利用多核的一个特性,而单进程的 Nginx 是做不到这一点的,所以默认的配置中都是打开为多进程的 Nginx。 我们来看一下,多进程的 Nginx 结构中它的进程模型是怎样的。 多进程中的 Nginx 进程架构如下图所示,会有一个父进程(Master Process),它会有很多子进程(Child Processes),这些子进程会分为两类: worker 进程 cache 相关的进程 为什么 Nginx 采用多进程结构而不是多线程结构呢? 因为 Nginx 最核心的一个目的是要保持高可用性、高可靠性,而当 Nginx 如果使用的是多线程结构的时候,因为线程之间是共享同一个地址空间的,所以当某一个第三方模块引发了一个地址空间导致的段错误时、在地址越界出现时,会导致整个 Nginx 进程全部挂掉。而当采用多进程模型时,往往不会出现这样的问题。从上图可以看到 Nginx 在做进程设计时,同样遵循了实现高可用、高可靠这样的一个目的。 比如说在 master 进程中,通常第三方模块是不会在 master 部分加入自己的功能代码的。虽然

python学习笔记之---多进程

我与影子孤独终老i 提交于 2019-12-04 05:42:27
首先,思考多进程、多线程、协程的区别? 其次,什么时候该用哪种模式? 进程:一个程序在计算机里面的一次运行。 线程:进程中调度执行的最小单位。 多进程:利用多核cpu,硬件的计算能力变强了。 程序的计算要求比较高的时候。 多线程:一核cpu,硬件的计算能力变弱了。 不是强调计算能力,而是强调多io操作的时候。(什么是IO?输入,输出:从键盘接收一个东西叫输入,打印一个东西叫输出) 多个线程之间做切换,比协程的切换效率要低一些。 协程: 本质是单线程,比多线程的效率高 单线程来实现不同任务的切换,是任务本身来实现的。 多io操作。 多进程编程会比多线程编程麻烦:因为多进程之间是无法共享一个变量的,多线程之间可以共享变量(同一个进程里)的使用,比较麻烦。 什么时候该用哪种模式呢? 计算密集型的任务时使用多进程,多核cpu计算效率更高 做多io操作的时候用线程或者协程都可以,但是对于多io来说协程的效率比多线程更高一些,不过同时协程的复杂度也比多线程更高一些 区别是什么? 线程必须运行在进程里面,一个进程至少有一个线程。 进程是操作系统分配资源的最小单位。 一个进程中的不同线程,会共用一个进程中的资源。 并发和并行什么区别: 并发:一起执行,并不一定是在某一时刻就同时执行 并行:在同一时刻执行。 多进程、多线程、协程都是用来提升并发性的。 同步:注册和登录,必须按同步是按顺序执行

浏览器的进程与线程详解

◇◆丶佛笑我妖孽 提交于 2019-12-03 23:17:59
进程 进程是cpu的资源分配的最小单位。 多进程 :多进程指的是在同一个时间里,同一个计算机系统中如果允许两个或两个以上的进程处于运行状态。多进程带来的好处是明显的,比如你可以听歌的同时,打开编辑器敲代码,编辑器和听歌软件的进程之间丝毫不会相互干扰。 浏览器是多进程的,浏览器的进程主要包括以下几种: Browser进程:浏览器的主进程(负责协调,主控) 第三方插件进程:每种类型的插件对应一个进程,仅当使用该插件时才创建 GPU进程:最多一个,用于3D绘制 浏览器渲染进程(内核) :默认每个Tab页面一个进程,互不影响,控制页面渲染,脚本执行,事件处理等(有时候会优化,如多个空白tab会合并成一个进程) 在浏览网页时,同时打开几个新的页面, 这就要打开几个浏览窗口,但一旦开启十几个窗口,整个计算机就会越来越慢。 多进程浏览器的优点 避免页面渲染影响整个浏览器 避免第三方插件影响整个浏览器 多进程充分利用多核优势 方便使用沙盒模型隔离插件等进程,提高浏览器稳定性 通俗的讲,就是用户打开多个窗口,如果其中一个窗口崩掉了,也不会影响整个浏览器,其他的界面照样正常运行 线程 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线; 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号)。 浏览器的渲染进程