python分布式进程
python分布式进程
分布式主从设计,客户端服务端设计,生产者消费者设计,这几种有什么区别?
=========
总的来讲,客户端服务端应该是整个系统的架构,
生产者和消费者是服务架构的架构的一种
分布式也是服务端架构设计的一种,所以这样看分布式是生产者消费者架构下的一种,但是用了生产者和消费者不一定是分布式,
生产者消费者模型的生产者或消费者,可以是单个机器上的多进程,可以是多线程,可以是模块,也可以是多个机器,
如果是多个机器作为消费者,不就是一个分布式了,
========
生产者消费者模型,python中的进程,线程,协程,都可以实现,
生产者消费者中间的通信,使用队列,
========
为什么python实现分布式使用进程,而不是线程?
分布式进程,在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。
Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块封装很好,不必了解网络通信的细节,就可以很容易地编写分布式多进程程序。
所谓分布式运算,既可以指在同一台机器上利用多进程(线程)进行运算,又可以指将计算任务进行分解,利用多台机器进行运算。本文中的分布式单指最后一种。
python的标准库multiprocessing中存在一个managers的子模块,该模块支持将多进程分布到多台机器上。选择一个进程来调度任务,其他进程进行计算,从而实现分布式运算。而调度进程和计算进程之间的通信,是通过网络来进行的,用到了python的socket模块。
所以分布式设计到多个机器的问题,所以一定要用进程,
=======
使用Celery实现分布式任务这个又是什么?
=======
nginx、uvicorn、gunicorn 这些 HTTP sever 都是 master-slave 架构,你好奇他们是怎么实现的吗?