1、RabbitMQ(消息队列)
Python中,threading QUEUE:限制于不同线程之间的数据同步交互;
Python中,进程 QUEUE:限制于父进程与子进程进行交互,或者同属于同一父进程下的多个子进程进行交互;
RabbitMQ是基于erlang语言的;
安装pika:pip install pika;
生产者:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel() #声明一个管道
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',routing_key='hello',body='Hello word')
print("[x] send 'Hello World!'")
connection.close()
消费者:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch,method,properties,body):
print("--->",ch,method,properties)
channel.basic_consume(callback,queue='hello',no_ack=True) #no_ack=True表示无须发确认
channel.start_consuming()
轮询机制:把消息依次公平的发给每个消费者;
生产者如何确认消费者任务是处理完的,需要消费者告诉其任务是否处理完,no_ack=True表示无须发确认;只要客户端没确认,生产者则不会将该条数据删除;
rabbitMQ下sbin目录下,通过命令:rabbitmqctl.bat list_queues查看有多少个queue及多少条消息;
rabbitMQ持久化:channel.queue_declare(queue='hello',durable=True);客户端和服务器端都要填写,防止数据丢失;持久化只是针对对列,而非队列里的数据持久化,若想消息持久化:在生产者端更改为如下代码:
channel.basic_publish(exchange='',routing_key='hello',body='Hello word',properties=pika.BasicProperties(delivery_mode=2))
广播类型:fanout、directe和topic;
2、Redis
单线程的key-value存储系统,其最高读写速度8万和10万;端口号默认6379;
连接Redis:redis-cli;
Python中如何操作Redis:
import redis
r=redis.Redis(host='10.211.55.4',port=6379)
r.set('foo','bar')
print(r.get('foo'))
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以是实现多个Redis实例共享一个连接池;
import redis
pool = redis.ConnectionPool(host='10.201.*.*',port=6379)
r=redis.Redis(connction_pool=pool)
r.set('foo','Bar')
print(r.get('foo'))
3、进程
https://www.cnblogs.com/alex3714/articles/5230609.html
4、协成
5、线程
https://www.cnblogs.com/alex3714/articles/5143440.html
6、堡垒机