【细节篇】企业级-关于线程和进程的使用一些问题(python)

74 阅读2分钟

在python中使用线程和进程,大家应该都知道如何使用了。

大家平时使用中,可能感觉两者的区别并不大,实际上,在某些场景下,两者的使用会产生很大的不同。

先来一篇概念: 进程是操作系统资源分配的基本单位,是一个独立的执行单元,拥有自己的地址空间和数据栈等资源。而线程是操作系统调度的基本单位,是进程内的一个执行单元,没有独立的地址空间,但共享进程的资源。因此,进程和线程的主要区别在于它们的基本单位和拥有的资源不同。


简单点说,线程其实属于一种小进程,是大进程里面的一个小进程

那么问题就来了,如果说,线程出现问题,某一个线程出现崩溃,就会引导到它所在的进程,就会造成整个进程都死掉。

那么可以看到,线程的健壮性,明显没有进程高

因为一个进程崩溃后,不会对其他进程产生影响

多进程要比多线程健壮


过去遇到的问题就是:

首先:我们部署在服务器的后端服务,在前端进行调用的时候,其实他是进行多线程的调用接口

也就是用了一个线程进行处理数据,此时,当前这个数据处理需要的时长非常大

这个原因是:有大批数据,需要先下载下来,然后再进行上传。

下载--处理--再上传,这个步骤多达上百,上千,从而严重影响了主进程的正常运行,消耗本身主进程的大量资源


解决方案1:

创建一个进程 处理xxx数据

p = multiprocessing.Process(target=self.process_xxx, args=(参数xx,))

p.start()


解决方案二:

参考使用消息队列去处理多而复杂的任务:

比如:

1 RabbitMQ 开源的消息队列系统

2 Kafka 开源的消息队列系统

当前我使用的是:python-kafka

把任务推到生产者,让他一个个去消费即可

关于这个的消息队列任务的使用,我会在后面的章节给大家分享,非常好用,企业开发必备!