【发布时间】: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