async-job 0.7.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 75714ead23077e752af18aead579e3590187f0119a564024e0dbafe1f8c0ed82
4
- data.tar.gz: bb3d48e293245743b6f9316f250a52f274c9c27928ba869551344ee1b83390f5
3
+ metadata.gz: 71fdcce6742cea5cfaeac68e800c56f1dbfa5ea6849503544c35912675874838
4
+ data.tar.gz: a607a76328c14cee24618479efd1d6924adc5634d7a89d21df0ccccbea78b1d8
5
5
  SHA512:
6
- metadata.gz: a28a7f19901b8376570e47963bd0aa3d10ba7c16440058d6da0dd74136ee7937448e4c3175ada2aad0a313540b963d6c7a17354c457c81960ade593570d35439
7
- data.tar.gz: 82048073802bd9cfa18c29142e979e57af45f4916a62d41e327f688dbfce6be2f8ca7293db5df087458c2fff8212c878dd35611ea13730f885e8557351760e02
6
+ metadata.gz: 7bc8ac06036c862eb827af97ef43764dd44036dc14cdb5f988a294fc2dbbac5f441b32d71cd6551aa3000c190de82105fcce65771ced7b67d08a8f24e598c872
7
+ data.tar.gz: 145098c24c1a115d018a4ecc8a1796aa295c4cfb85b8099c30c2e82c9a89fd31780e525015e799a12be807e748c824f299ac88677afdf0764f7b1594094b758e
checksums.yaml.gz.sig CHANGED
Binary file
@@ -28,34 +28,61 @@ module Async
28
28
  Console::Event::Failure.for(error).emit(self, "Could not flush #{jobs.size} jobs.")
29
29
  end
30
30
 
31
- def run
31
+ def run(task)
32
32
  while true
33
33
  while @pending.empty?
34
34
  @ready.wait
35
35
  end
36
36
 
37
- # Swap the buffers:
38
- @pending, @processing = @processing, @pending
39
-
40
- flush(@processing)
37
+ task.defer_stop do
38
+ # Swap the buffers:
39
+ @pending, @processing = @processing, @pending
40
+
41
+ flush(@processing)
42
+ end
41
43
  end
42
44
  end
43
45
 
44
- def start!(parent: Async::Task.current)
45
- @task ||= parent.async(transient: true) do
46
- run
46
+ # Start the background processing task if it is not already running.
47
+ #
48
+ # @return [Boolean] true if the task was started, false if it was already running.
49
+ protected def start!(parent: Async::Task.current)
50
+ return false if @task
51
+
52
+ # We are creating a task:
53
+ @task = true
54
+
55
+ parent.async(transient: true, annotation: self.class.name) do |task|
56
+ @task = task
57
+
58
+ run(task)
47
59
  ensure
48
60
  # Ensure that all jobs are flushed before we exit:
49
- flush(@pending)
50
- flush(@processing)
61
+ flush(@processing) if @processing.any?
62
+ flush(@pending) if @pending.any?
63
+ @task = nil
51
64
  end
65
+
66
+ return true
52
67
  end
53
68
 
69
+ # Enqueue a job into the pending buffer.
70
+ #
71
+ # Start the background processing task if it is not already running.
54
72
  def call(job)
55
- start!
56
-
57
73
  @pending << job
58
- @ready.signal
74
+
75
+ start! or @ready.signal
76
+ end
77
+
78
+ def start
79
+ @delegate&.start
80
+ self.start!
81
+ end
82
+
83
+ def stop
84
+ @task&.stop
85
+ @delegate&.stop
59
86
  end
60
87
  end
61
88
  end
@@ -30,6 +30,14 @@ module Async
30
30
  Console.error(self, error)
31
31
  end
32
32
  end
33
+
34
+ def start
35
+ @delegate&.start
36
+ end
37
+
38
+ def stop
39
+ @delegate&.stop
40
+ end
33
41
  end
34
42
  end
35
43
  end
@@ -36,17 +36,37 @@ module Async
36
36
  @parent = parent || Async::Idler.new
37
37
  end
38
38
 
39
+ def start!
40
+ return false if @task
41
+
42
+ @task = true
43
+
44
+ @parent.async(transient: true, annotation: self.class.name) do |task|
45
+ @task = task
46
+
47
+ while true
48
+ self.dequeue(task)
49
+ end
50
+ ensure
51
+ @task = nil
52
+ end
53
+ end
54
+
39
55
  def start
40
- Console.info(self, "Starting server...")
56
+ @delegate&.start
57
+
41
58
  # Start the delayed queue, which will move jobs to the ready queue when they are ready:
42
59
  @delayed_queue.start(@ready_queue, resolution: @resolution)
43
60
 
44
61
  # Start the processing queue, which will move jobs to the ready queue when they are abandoned:
45
62
  @processing_queue.start
46
63
 
47
- while true
48
- self.dequeue(@parent)
49
- end
64
+ self.start!
65
+ end
66
+
67
+ def stop
68
+ @task&.stop
69
+ @delegate&.stop
50
70
  end
51
71
 
52
72
  def call(job)
@@ -13,6 +13,10 @@ module Async
13
13
  @delegate = delegate
14
14
  end
15
15
 
16
+ def empty?
17
+ @jobs.empty?
18
+ end
19
+
16
20
  attr :jobs
17
21
 
18
22
  def call(job)
@@ -23,6 +27,14 @@ module Async
23
27
  def pop
24
28
  @jobs.dequeue
25
29
  end
30
+
31
+ def start
32
+ @delegate&.start
33
+ end
34
+
35
+ def stop
36
+ @delegate&.stop
37
+ end
26
38
  end
27
39
  end
28
40
  end
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Async
7
7
  module Job
8
- VERSION = "0.7.0"
8
+ VERSION = "0.8.0"
9
9
  end
10
10
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -38,7 +38,7 @@ cert_chain:
38
38
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
39
39
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
40
40
  -----END CERTIFICATE-----
41
- date: 2024-08-03 00:00:00.000000000 Z
41
+ date: 2024-08-08 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: async
metadata.gz.sig CHANGED
Binary file