多进程和多线程

一、python 中多进程的使用

1、使用multiprocessing

p = Process(target=function, args=(参数,))

p.start()含义启动进程

p.join()含义是等待子进程结束后在继续执行

2、如果启动大量的子进程,可以用进程池的方式批量创建子进程

from multiprocessing import Pool

p = Pool(4)

for i in range(5):

p.apply_async(function, args=(i, )

p.close()

p.terminate()进入死循环时,只能强行终止

单线程(进程)中使用close与多线程中是一致的,但两者与多进程的行为并不一致,多进程中共享同一个socket必须都调用close才会真正的关闭起来,而shutdown没有引用计数,调用就会关闭连接

3、Pool默认大小是cpu核数

4、subprocess 模块可以更方便的启动子进程,然后控制输入及输出

5、process提供了Queue、Pips方式进程交换数据

6、multiprocessing 模块封装了fork()调用,当调用fork()时,返回两次。操作系统把当前进程复制一份,子进程永远返回0,而父进程返回子进程的ID

7、进程是由若干线程组成的,一个进程至少有一个线程

二、多线程(使用模块threading):
1,、由于任何进程默认会启动一个线程,我们该线程称为主线程,主线程可以启动新的线程,python模块中threading中有current_thread(),它永远返回当前线程的实例,主线程的实例叫MainThread()

2、threading.Lock()

线程获取锁,因此其他线程不能同时执行函数,只能等待,直到锁被释放后,获取该锁才能修改。

使用

lock.acquire() 获取锁

try:

finally:

lock.release() 释放锁

3、python 多核GIL全局锁,导致python线程无法利用多核用来保证锁一定被释放掉

4、Treadlocal(为了避免每个函数层层调用,将每个线程的名字作为key,函数作为value使用)

1)可以存储全局变量

2)也不需要管理锁的问题,内部会处理

最常用的地方解决数据的链接

## 三、多线程和多进程区别:

1)多进程中,同一份变量,都各自有一份拷贝存在于每个进程中,互不影响。

2)多进程优点

多进程模式的最大优点是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程

1、多进程的缺点

多进程的缺点就是创建进程的代价大,在linux系统下用fork调用还行,在windows下开销巨大。操作系统同时运行的进程是有限的,在内存和cpu的限制下。

2、多线程的缺点

致命缺点:

1)、任何一个线程挂掉都可能造成整个进程崩溃,应为线程共享内存

在windows下,多线程的效率比多进程高,多线程存在稳定性问题

2)、多线程中,都由所有线程共享,任何一个变量都可以被任何线程修改。线程之间共享数据最大的危险在于多个线程同时修改一个变量。

四:计算密集型vs io密集型

计算密集型任务的特点是要进行大量计算,消耗cpu资源,全靠cpu的运行能力,任务越多,cpu执行任务的效率越低,因此代码的运行效率至关重要

io密集型:

涉及网络、磁盘io,这类人物的特点是cpu消耗很少,任务的大部分时间都是在等待io操作完成,对于io密集型任务,任务越多,cpu效率越高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值