Is there any library for the queueing mechanism?

What’s used by the most - Cron? But a task or rather script executed by Cron won’t access to the context of an application. Meaning, a task will have be an independent unit. Whereas I want is a library to use inside a project such that it’ll have access to everything.

Anything similar to Sidekiq exist in Rust?

  • nothingness@lemmy.worldOP
    link
    fedilink
    arrow-up
    1
    arrow-down
    1
    ·
    edit-2
    1 year ago

    For my project I just run them.

    How would you “just run” a task every 30 minutes? Every 5 hours? Once a day?

    • kevincox@lemmy.ml
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago
      std::thread::spawn(|| {
          loop {
              std::thread::sleep(std::time::Duration::from_secs(30*60));
              do_job();
          }
      });
      

      Works pretty well. Maybe add a bit of code to crash the whole process on panic or some other logging. Wastes a few KiB of memory per loop but probably not a major issue. Doing this with async will waste only the tiniest amount of memory.

        • kevincox@lemmy.ml
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          It depends. Sometimes you can just put an exit call at the end of main to kill the thread. If you want to attempt graceful shutdown then usually I just use a boolean shutdown flag. Then the loop becomes while !shutdown.get() {

        • kevincox@lemmy.ml
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          Best option is probably to add a wrapper around the thread that re-spawns it. But you can also just catch panics in the loop.

          • nothingness@lemmy.worldOP
            link
            fedilink
            arrow-up
            1
            arrow-down
            1
            ·
            edit-2
            1 year ago

            How would you re-run it multiple times then? An internal should be progressively greater. How would you terminate it if it continues to produce an exception?