Sucker Punch 是一个使用 concurrent-ruby 的 Ruby 异步处理库,深受 Sidekiq 和 girl_friday 的影响。
Sucker Punch 是一个使用 concurrent-ruby 的 Ruby 异步处理库,深受 Sidekiq 和 girl_friday 的影响。
Sucker Punch 是一个单进程 Ruby 异步处理库。 这降低了在 Heroku 等服务上的托管成本,同时也减少了在专用服务器上维护额外任务所需的内存占用。 所有队列都可以在单个应用程序(例如 Rails、Sinatra 等)进程内运行。
Sucker Punch 非常适合处理异步任务,如发送邮件、数据处理或社交平台操作。当您可以在 Web 应用程序的同一进程内后台完成这些操作时,就没有理由让用户等待。
Sucker Punch 是基于 concurrent-ruby 构建的。每个任务被设置为一个池,这相当于它自己的队列,由各个工作进程处理这些任务。与大多数其他后台处理库不同,Sucker Punch 的任务存储在内存中。这样做的好处是无需额外的基础设施要求(例如数据库、Redis 等)。然而,如果 Web 进程在队列中仍有任务时被重启,这些任务将会丢失。因此,Sucker Punch 通常推荐用于快速且非关键任务(例如日志、邮件等)。
将以下行添加到你的应用程序的 Gemfile 中:
gem 'sucker_punch', '~> 3.0'然后执行:
$ bundle你也可以运行(等同于上面两步):
bundle add sucker_punch或者自行安装:
$ gem install sucker_punch3.x 版本未引入任何破坏性更改。
在 ~> 2.0.0 版本中,用于入队异步后台任务的语法已从:
LogJob.new.async.perform(...)更改为:
LogJob.perform_async(...)如果你从 2.0.0 之前的版本升级,并希望保留旧语法 LogJob.new.async.perform(...),可以在你的应用中包含 sucker_punch/async_syntax。
对于 Rails,你可以添加一个初始化器:
# config/initializers/sucker_punch.rb
require 'sucker_punch/async_syntax'每个任务都充当自己的队列,并且应该是一个独立的 Ruby 类,该类:
SuckerPunch::Jobperform 实例方法暂无开放 Issues,或尚未同步最近议题。