【问题标题】:Redis server responds 'Resource temporarily unavailable' in multithreading Perl scriptRedis 服务器在多线程 Perl 脚本中响应“资源暂时不可用”
【发布时间】:2012-05-30 23:22:05
【问题描述】:

我正在用 Perl 开发一些使用线程(最多 10 个)的脚本;每个线程读取一个文件,处理每一行并将每行的结果保存在 Redis 中的列表或哈希表中。一切正常,直到有超过 15 个线程,一些线程死了,而另一些则执行了他们必须做的事情。这是我得到的错误:

Thread 2 terminated abnormally: Error while reading from Redis server: Resource temporarily unavailable at /Library/Perl/5.10.0/Redis.pm line 518 thread 2

正如消息中所说,Redis 服务器位于顶部。错误从这里开始(没什么异常):

$self->{_redis}->rpush($key, $data);

我正在使用 Redis 2.4.14 和 Pedro Melo 的 package of Redis for Perl

您认为这是处理这些数据结构的好方法吗?我的意思是,将 Redis 与线程一起使用?有没有别的好办法?或者我应该怎么做才能解决这个问题?

提前致谢!

【问题讨论】:

  • 我不确定它是否会有所帮助,但是如果您改用 Redis::Client 会发生什么?使用带有网络资源的线程总是很麻烦。
  • 嗨!我有点迷糊,但是需要服务器来处理数据结构,而Perl的包是连接Redis的客户端,还是什么意思?
  • Redis::Client 是一个单独的 Perl 包,用于与使用较新的 Redis 协议的 Redis 通信。不过,我不知道它是否有助于多线程。
  • 你每个线程使用一个redis连接吗?我认为你应该这样做,因为这个包的文档中没有提到多线程支持。
  • 谢谢!我为每个线程建立了一个连接,它可以工作,谢谢!

标签: multithreading perl redis


【解决方案1】:

我的错误是我只建立一个连接并在每个线程中使用该连接。 解决方案:每个线程都连接到 Redis 服务器。

感谢 Didier Spezia 的解决方案。

【讨论】:

    猜你喜欢
    • 2020-01-17
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多