I am currently using Resque for my background process but recently I heard a lot of huff-buff about sidekiq. Could anybody compare/differentiate?

In particular I would like to know is there a way to monitor programmatically whether a job is completed in sidekiq


Resque:

Pros:

  • does not require thread safety (works with pretty much any gem out there);
  • has no interpreter preference (you can use any ruby);
    Resque currently supports MRI 2.3.0 or later
  • loads of plugins.

Cons

  • runs a process per worker (uses more memory);
  • does not retry jobs (out of the box, anyway).

Sidekiq:

Pros

  • runs thread per worker (uses much less memory);
  • less forking (works faster);
  • more options out of the box.

Cons

  • [huge] requires thread-safety of your code and all dependencies. If you run thread-unsafe code with threads, you're asking for trouble;
  • works on some rubies better than others (jruby is recommended, efficiency on MRI is decreased due to GVL (global VM lock)).

From the question:

In particular I would like to know is there a way to monitor programmatically whether a job is completed in sidekiq

Here's a solution for that:

  1. Sidekiq::Status gem
  2. Batch API (Sidekiq Pro) - usage