我正在使用https://github.com/meh/ruby-thread中讨论的线程池来生成多个下载器。
save
我正在尝试下载许多 RSS 提要的内容,总共将近 200K 提要,但是在调用 ActiveRecord 的方法 时,我的 MySQL 数据库中的锁定和并发性存在问题。
我很确定我需要指定一个线程来与数据库交互并向该线程发送信号,但我不确定如何构建它。
我正在使用https://github.com/meh/ruby-thread中讨论的线程池来生成多个下载器。
save
我正在尝试下载许多 RSS 提要的内容,总共将近 200K 提要,但是在调用 ActiveRecord 的方法 时,我的 MySQL 数据库中的锁定和并发性存在问题。
我很确定我需要指定一个线程来与数据库交互并向该线程发送信号,但我不确定如何构建它。
看看 Ruby 的Queue类。
创建一个队列,用于在将数据发送到数据库之前保存记录信息。您所有的 RSS 线程都以“生产者”的身份写入它。
创建一个仅从该队列读取并作为“消费者”写入数据库的新线程。保持领先于 RSS 线程应该没有问题。
您需要join
所有线程的主代码,包括数据库使用者,因此所有线程在应用程序退出之前完成,否则您可能会得到未写入的记录。
由于您没有显示源代码,因此我们无法帮助您集成它,但应该很容易做到。