【问题标题】:Python Redis Multiprocessing - redis.exceptions.ConnectionError -Python Redis 多处理 - redis.exceptions.ConnectionError -
【发布时间】:2021-02-12 04:44:24
【问题描述】:

我编写了一个执行多处理并执行扫描、获取和设置到 Redis 的程序。我们选择 Redis 的原因是为了加快速度。

有人有什么建议吗?我尝试在 get 语句周围放置一个重试循环(对于 set 也可以这样做),但 Scan 语句会更加棘手。是否有一些我扫描更改或增加的参数来避免这种情况?

错误:

redis.exceptions.ConnectionError: Error 10048 connecting to 192.168.5.51:6379. Only one usage of each socket address (protocol/network address/port) is normally permitted.
  File "C:\Apps\ProcessData\redis\connection.py", line 1192, in get_connection
    connection.connect()
  File "C:\Apps\ProcessData\redis\connection.py", line 563, in connect
    raise ConnectionError(self._error_message(e))
  File "C:\Apps\ProcessData\redis\connection.py", line 563, in connect
    raise ConnectionError(self._error_message(e))

我认为错误的第二部分是这样的:等待它再次发生以获得确切的文本:

Error 10048 connecting to 192.168.5.51:6379. Only one usage of each socket address (protocol/network address/port) is normally permitted.

对于执行 redis-get 的代码,我正在尝试以下操作:

redis_max_retries = 72
redis_retries = 0
redis_get_success = False
sleep_time_in_seconds = .1
while not redis_get_success and redis_retries < redis_max_retries:
    try:
       json_str = redis_obj.get(redis_key)
       redis_get_success = True
    except redis.exceptions.ConnectionError as e:
        redis_retries += 1
        time.sleep(sleep_time_in_seconds)

if not redis_get_success:
    print("redis_retries=", redis_retries, " on json_str = redis_obj.get(redis_key) in process_intervals" )
    sys.exit(0)

但我在扫描时也遇到了错误,重试看起来更棘手。

    for keybatch in batcher(redis_obj.scan_iter(key_pattern), 1500):
        batch_counter += 1
        # print(batch_counter, "keybatch=", keybatch)

        for key in keybatch:
            if key is not None:
                #print("Trying key=", key)
                matching_keys_found += 1
                etc... 

【问题讨论】:

    标签: redis redis-py python-3.9


    【解决方案1】:

    尝试连接到在线 Redis 托管站点,例如 RedisLabs.com 并使用 documentation 进行连接,或者您可以尝试更改端口。 错误是由端口或配置错误的 Redis 服务器设置引起的。 同样的端口和地址见Only one usage of each socket address (protocol/network address/port) is normally permitted?

    【讨论】:

    • 因为我们需要内存,我们迁移到了自托管 Redis。它也发生在其他程序中,因此与多处理无关。仍在试图弄清楚我的重试是否有效,也许我需要增加重试时间。我刚刚读到这个:help.socketlabs.com/docs/…
    • 我想我看到了那个帖子,但是我们在 Ubuntu 上托管,它根本没有提到 Redis。希望 redis_py 库可以解决,因为我没有直接编写任何套接字。但是也许我们确实需要在该服务器上打开更多的套接字/端口......而且它通常在一次运行一个 Python 程序时工作正常,或者没有多处理。所以这不是文档/端口问题。我可以连接,但我认为我已断开连接。
    • 尝试使用 connection_pool 属性并在完成时断开连接。这可能会为更多的连接铺平道路。除非同时拥有多个连接很重要。
    • 你看到了吗:redis.io/topics/clients
    猜你喜欢
    • 2020-07-18
    • 2021-04-23
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2011-04-20
    • 2016-05-30
    相关资源
    最近更新 更多