Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan redis+python sebagai baris gilir mesej

Cara menggunakan redis+python sebagai baris gilir mesej

WBOY
WBOYke hadapan
2023-06-03 18:24:011872semak imbas

1. Gunakan jenis Senarai redis digabungkan dengan lpush dan brpop untuk melaksanakan

Pengenalan

  • Pertama sekali, Senarai redis adalah bersamaan dengan baris gilir , yang boleh melaksanakan masuk dahulu, keluar dahulu Peraturan

  • menggunakan brpop kerana apabila tiada apa-apa dalam baris gilir, ia akan menyekat sehingga terdapat elemen popable dalam baris gilir atau masa tunggu habis

Masalah Simulasi:

  • Terdapat terlalu banyak akses dan kelajuan pemprosesan pelayan terlalu perlahan Jika pelayan memberi maklum balas selepas itu menunggu setiap pengguna, masa terlalu lama, sambungan http tamat, dan ralat pelayan berlaku.

Proses pelaksanaan simulasi:

  • Terdapat pelanggan yang sentiasa meletakkan sesuatu (data) ke dalam baris gilir, menggunakan multi-threading untuk mensimulasikan bilangan pengguna yang besar Situasi akses

  • Terdapat pelayan yang terus mengeluarkan cetakan daripada baris gilir dan menetapkan masa tidur untuk setiap cetakan kepada 2 saat

pengenalan Struktur Senarai redis

key [value, value]
key 代表List的名字, [value, ...] 是值

Client client.py

import random
import threading
import redis
import config

lock = threading.Lock()
lock.acquire()
lock.release()


pool = redis.ConnectionPool(host=config.HOST, port=config.PORT, 
                            decode_responses=True, password=config.PASSWORD)

r = redis.Redis(connection_pool=pool)

# 客户往redis 中放数据
def fun1(redisObj):
    value = random.randint(0, 100)
    # 往ccc列表中存放
    print("开始发送数据:", value)
    redisObj.lpush("print",str(value))

for i in range(100):
    threading.Thread(target=fun1, args=(r,)).start()

Server server.py

import redis
import time
import config


pool = redis.ConnectionPool(host=config.HOST, port=config.PORT, decode_responses=True, password=config.PASSWORD)
r = redis.Redis(connection_pool=pool)
# 服务端不断的取
while True:
    value = r.brpop("print")
    time.sleep(2)
    print(value)

Semakan masalah

Kami telah berkata sebelum ini ada masalah menyekat terlalu lama dan memutuskan sambungan Masalah diselesaikan dengan cara

: merawat sambungan sebagai fungsi, menangkap ralat dan menyambung semula apabila masalah berlaku.

rreeee

Atas ialah kandungan terperinci Cara menggunakan redis+python sebagai baris gilir mesej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam