python redis penggunaan pelbagai proses
巴扎黑
巴扎黑 2017-06-08 11:02:09
0
1
1043
class RedisClient(object):
    def __init__(self):
        pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
        self.client = redis.StrictRedis(connection_pool=pool)

Tulis klien redis dengan kumpulan sambungan mengikut dokumentasi, dan kemudian jana tika untuk kegunaan global.
Ia telah diuji untuk menjadi normal apabila berkongsi kejadian dalam berbilang rangkaian.
Tetapi dalam kes pelbagai proses, ujian gagal

class ProcessRdeisTest(Process):
    def __init__(self,client):
        self._client = client

Ditulis seperti ini, apabila melaksanakan permulaan, ralat akan dilaporkan dan siri tidak dapat dilakukan.
ditukar kepada:

class ProcessRdeisTest(Process):
    def __init__(self):
        pass
    def run(self):
        self._client = RedisClient()
        while Ture:
            dosomething()
        

Ia berfungsi seperti ini, tetapi adakah kaedah sambungan ini betul? Adakah terdapat cara yang lebih baik untuk mencapai ini?

Dalam utas utama, terus
process1 = ProcessRdeisTest('p1')
process1.start()
Panggil dengan cara ini

巴扎黑
巴扎黑

membalas semua(1)
typecho

Pemilik, python redis mempunyai kolam sambungannya sendiri:

import redis
import threading

class RedisPool(object):
    __mutex = threading.Lock()
    __remote = {}

    def __new__(cls, host, passwd, port, db):
        with RedisPool.__mutex:
            redis_key = "%s:%s:%s" % (host, port, db)
            redis_obj = RedisPool.__remote.get(redis_key)
            if redis_obj is None:
                redis_obj = RedisPool.__remote[redis_key] = RedisPool.new_redis_pool(host, passwd, port, db)
        return redis.Redis(connection_pool=redis_obj)

    def __init__(self, host, passwd, port, db):
        pass

    @staticmethod
    def new_redis_pool(host, passwd, port, db):
        redis_obj = redis.ConnectionPool(host=host, password=passwd,
                                         port=port, db=db, socket_timeout=3, max_connections=10) # max_connection default 2**31
        return redis_obj
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!