在python中使用线程和进程,大家应该都知道如何使用了。
大家平时使用中,可能感觉两者的区别并不大,实际上,在某些场景下,两者的使用会产生很大的不同。
先来一篇概念: 进程是操作系统资源分配的基本单位,是一个独立的执行单元,拥有自己的地址空间和数据栈等资源。而线程是操作系统调度的基本单位,是进程内的一个执行单元,没有独立的地址空间,但共享进程的资源。因此,进程和线程的主要区别在于它们的基本单位和拥有的资源不同。
简单点说,线程其实属于一种小进程,是大进程里面的一个小进程
那么问题就来了,如果说,线程出现问题,某一个线程出现崩溃,就会引导到它所在的进程,就会造成整个进程都死掉。
那么可以看到,线程的健壮性,明显没有进程高
因为一个进程崩溃后,不会对其他进程产生影响
多进程要比多线程健壮
过去遇到的问题就是:
首先:我们部署在服务器的后端服务,在前端进行调用的时候,其实他是进行多线程的调用接口
也就是用了一个线程进行处理数据,此时,当前这个数据处理需要的时长非常大
这个原因是:有大批数据,需要先下载下来,然后再进行上传。
下载--处理--再上传,这个步骤多达上百,上千,从而严重影响了主进程的正常运行,消耗本身主进程的大量资源
解决方案1:
创建一个进程 处理xxx数据
p = multiprocessing.Process(target=self.process_xxx, args=(参数xx,))
p.start()
解决方案二:
参考使用消息队列去处理多而复杂的任务:
比如:
1 RabbitMQ 开源的消息队列系统
2 Kafka 开源的消息队列系统
当前我使用的是:python-kafka
把任务推到生产者,让他一个个去消费即可
关于这个的消息队列任务的使用,我会在后面的章节给大家分享,非常好用,企业开发必备!