async 2.10.2 → 2.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4ced20437db1c26026bbe526bc5c69c4ef467bf89fa7784eac27e5a4a0ad3d3a
4
- data.tar.gz: 34724c6fcc75517b86a8875482f744cc7cfe83bce1fe87fdde28cf2851b46b0f
3
+ metadata.gz: 1eef4bf800b6d52c0f273289186f9886975237ecdf9885f599617691283ca2e5
4
+ data.tar.gz: 14a7e20dc72c178b89a93233a73fd49f182f7aec7926804b9b8bf37e8ceb9f36
5
5
  SHA512:
6
- metadata.gz: 35919d63868bf8c0524807e448415224438c25bc8b87824bfec34d613f8febd9459c4367df5c9a3275cf5dc59e78769c7ba420e2492c3d172f2ec6e2015ee6a6
7
- data.tar.gz: f707fb4cca45592ac4d0ba4f2e41a25f80c22db5a452e0710a106095ca2d30a32753e652a0a46a1ebbd2bc1b0a3ee37917927efdff4ea2405c3fc0ec1b31ba24
6
+ metadata.gz: 30176358a5c9efc3df3e525e0ba941f5771bb7619bef28e1b6229a547ad3a24cb5475483a257704c3eea2d9214dcca2e17932994e0859a1c5d4dfc6401b24d48
7
+ data.tar.gz: 8b7353cf2ef0884c78a919775b84280d3234c7868c6c3b95aa00ae560a5825a07bd9533eda1afcc9776d1c94b7cc116e549e24144e4bab7c9bb3f086782a7456
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/async/barrier.md CHANGED
@@ -9,7 +9,7 @@ require 'async/barrier'
9
9
 
10
10
  barrier = Async::Barrier.new
11
11
  Sync do
12
- Console.logger.info("Barrier Example: sleep sort.")
12
+ Console.info("Barrier Example: sleep sort.")
13
13
 
14
14
  # Generate an array of 10 numbers:
15
15
  numbers = 10.times.map{rand(10)}
@@ -26,7 +26,7 @@ Sync do
26
26
  # Wait for all the numbers to be sorted:
27
27
  barrier.wait
28
28
 
29
- Console.logger.info("Sorted", sorted)
29
+ Console.info("Sorted", sorted)
30
30
  ensure
31
31
  # Ensure all the tasks are stopped when we exit:
32
32
  barrier.stop
@@ -9,14 +9,14 @@ Sync do
9
9
  condition = Async::Condition.new
10
10
 
11
11
  Async do
12
- Console.logger.info "Waiting for condition..."
12
+ Console.info "Waiting for condition..."
13
13
  value = condition.wait
14
- Console.logger.info "Condition was signalled: #{value}"
14
+ Console.info "Condition was signalled: #{value}"
15
15
  end
16
16
 
17
17
  Async do |task|
18
18
  task.sleep(1)
19
- Console.logger.info "Signalling condition..."
19
+ Console.info "Signalling condition..."
20
20
  condition.signal("Hello World")
21
21
  end
22
22
  end
@@ -11,7 +11,6 @@ require_relative 'task'
11
11
  require 'io/event'
12
12
 
13
13
  require 'console'
14
- require 'timers'
15
14
  require 'resolv'
16
15
 
17
16
  module Async
@@ -40,7 +39,7 @@ module Async
40
39
  @busy_time = 0.0
41
40
  @idle_time = 0.0
42
41
 
43
- @timers = ::Timers::Group.new
42
+ @timers = ::IO::Event::Timers.new
44
43
  end
45
44
 
46
45
  # Compute the scheduler load according to the busy and idle times that are updated by the run loop.
@@ -165,7 +164,7 @@ module Async
165
164
  @blocked -= 1
166
165
  end
167
166
  ensure
168
- timer&.cancel
167
+ timer&.cancel!
169
168
  end
170
169
 
171
170
  # @asynchronous May be called from any thread.
@@ -225,7 +224,7 @@ module Async
225
224
 
226
225
  return @selector.io_wait(fiber, io, events)
227
226
  ensure
228
- timer&.cancel
227
+ timer&.cancel!
229
228
  end
230
229
 
231
230
  if ::IO::Event::Support.buffer?
@@ -240,7 +239,7 @@ module Async
240
239
 
241
240
  @selector.io_read(fiber, io, buffer, length, offset)
242
241
  ensure
243
- timer&.cancel
242
+ timer&.cancel!
244
243
  end
245
244
 
246
245
  if RUBY_ENGINE != "ruby" || RUBY_VERSION >= "3.3.1"
@@ -255,7 +254,7 @@ module Async
255
254
 
256
255
  @selector.io_write(fiber, io, buffer, length, offset)
257
256
  ensure
258
- timer&.cancel
257
+ timer&.cancel!
259
258
  end
260
259
  end
261
260
  end
@@ -347,6 +346,7 @@ module Async
347
346
  Kernel::raise ClosedError if @selector.nil?
348
347
 
349
348
  initial_task = self.async(...) if block_given?
349
+ interrupt = nil
350
350
 
351
351
  begin
352
352
  # In theory, we could use Exception here to be a little bit safer, but we've only shown the case for SignalException to be a problem, so let's not over-engineer this.
@@ -359,17 +359,20 @@ module Async
359
359
  break unless self.run_once
360
360
  end
361
361
  end
362
- rescue Interrupt
362
+ rescue Interrupt => interrupt
363
363
  Thread.handle_interrupt(::SignalException => :never) do
364
364
  self.stop
365
365
  end
366
366
 
367
367
  retry
368
368
  end
369
-
369
+
370
+ # If the event loop was interrupted, and we finished exiting normally (due to the interrupt), we need to re-raise the interrupt so that the caller can handle it too.
371
+ Kernel.raise interrupt if interrupt
372
+
370
373
  return initial_task
371
374
  ensure
372
- Console.logger.debug(self) {"Exiting run-loop because #{$! ? $! : 'finished'}."}
375
+ Console.debug(self) {"Exiting run-loop because #{$! ? $! : 'finished'}."}
373
376
  end
374
377
 
375
378
  # Start an asynchronous task within the specified reactor. The task will be
@@ -395,7 +398,7 @@ module Async
395
398
  # - Avoid scheduler overhead if no blocking operation is performed.
396
399
  task.run(*arguments)
397
400
 
398
- # Console.logger.debug "Initial execution of task #{fiber} complete (#{result} -> #{fiber.alive?})..."
401
+ # Console.debug "Initial execution of task #{fiber} complete (#{result} -> #{fiber.alive?})..."
399
402
  return task
400
403
  end
401
404
 
@@ -416,7 +419,7 @@ module Async
416
419
 
417
420
  yield timer
418
421
  ensure
419
- timer.cancel if timer
422
+ timer&.cancel!
420
423
  end
421
424
 
422
425
  def timeout_after(duration, exception, message, &block)
@@ -17,9 +17,9 @@ Sync do
17
17
  # Search for the terms:
18
18
  terms.each do |term|
19
19
  semaphore.async do |task|
20
- Console.logger.info("Searching for #{term}...")
20
+ Console.info("Searching for #{term}...")
21
21
  response = Net::HTTP.get(URI "https://www.google.com/search?q=#{term}")
22
- Console.logger.info("Got response #{response.size} bytes.")
22
+ Console.info("Got response #{response.size} bytes.")
23
23
  end
24
24
  end
25
25
  end
data/lib/async/task.rb CHANGED
@@ -8,6 +8,7 @@
8
8
  # Copyright, 2023, by Math Ieu.
9
9
 
10
10
  require 'fiber'
11
+ require 'console/event/failure'
11
12
 
12
13
  require_relative 'node'
13
14
  require_relative 'condition'
@@ -335,15 +336,15 @@ module Async
335
336
  raise exception
336
337
  elsif @finished.nil?
337
338
  # If no one has called wait, we log this as a warning:
338
- Console.logger.warn(self, "Task may have ended with unhandled exception.", exception)
339
+ Console::Event::Failure.for(exception).emit(self, "Task may have ended with unhandled exception.", severity: :warn)
339
340
  else
340
- Console.logger.debug(self, exception)
341
+ Console::Event::Failure.for(exception).emit(self, severity: :debug)
341
342
  end
342
343
  end
343
344
  end
344
345
 
345
346
  def stopped!
346
- # Console.logger.info(self, status:) {"Task #{self} was stopped with #{@children&.size.inspect} children!"}
347
+ # Console.info(self, status:) {"Task #{self} was stopped with #{@children&.size.inspect} children!"}
347
348
  @status = :stopped
348
349
 
349
350
  stopped = false
@@ -374,7 +375,7 @@ module Async
374
375
 
375
376
  begin
376
377
  completed!(yield)
377
- # Console.logger.debug(self) {"Task was completed with #{@children.size} children!"}
378
+ # Console.debug(self) {"Task was completed with #{@children.size} children!"}
378
379
  rescue Stop
379
380
  stopped!
380
381
  rescue StandardError => error
@@ -382,7 +383,7 @@ module Async
382
383
  rescue Exception => exception
383
384
  failed!(exception, true)
384
385
  ensure
385
- # Console.logger.info(self) {"Task ensure $! = #{$!} with #{@children&.size.inspect} children!"}
386
+ # Console.info(self) {"Task ensure $! = #{$!} with #{@children&.size.inspect} children!"}
386
387
  finish!
387
388
  end
388
389
  end
data/lib/async/version.rb CHANGED
@@ -4,5 +4,5 @@
4
4
  # Copyright, 2017-2024, by Samuel Williams.
5
5
 
6
6
  module Async
7
- VERSION = "2.10.2"
7
+ VERSION = "2.12.1"
8
8
  end
data/lib/async/waiter.md CHANGED
@@ -38,7 +38,7 @@ Sync do
38
38
  # Stop all tasks which we don't care about:
39
39
  barrier.stop
40
40
 
41
- Console.logger.info("Smallest", numbers)
41
+ Console.info("Smallest", numbers)
42
42
  end
43
43
  ~~~
44
44
 
data/readme.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # ![Async](logo.svg)
2
2
 
3
- Async is a composable asynchronous I/O framework for Ruby based on [io-event](https://github.com/socketry/io-event) and
4
- [timers](https://github.com/socketry/timers).
3
+ Async is a composable asynchronous I/O framework for Ruby based on [io-event](https://github.com/socketry/io-event).
5
4
 
6
5
  > "Lately I've been looking into `async`, as one of my projects –
7
6
  > [tus-ruby-server](https://github.com/janko/tus-ruby-server) – would really benefit from non-blocking I/O. It's really
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.2
4
+ version: 2.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -62,7 +62,7 @@ cert_chain:
62
62
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
63
63
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
64
64
  -----END CERTIFICATE-----
65
- date: 2024-04-15 00:00:00.000000000 Z
65
+ date: 2024-06-23 00:00:00.000000000 Z
66
66
  dependencies:
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: console
@@ -70,14 +70,20 @@ dependencies:
70
70
  requirements:
71
71
  - - "~>"
72
72
  - !ruby/object:Gem::Version
73
- version: '1.10'
73
+ version: '1.25'
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 1.25.2
74
77
  type: :runtime
75
78
  prerelease: false
76
79
  version_requirements: !ruby/object:Gem::Requirement
77
80
  requirements:
78
81
  - - "~>"
79
82
  - !ruby/object:Gem::Version
80
- version: '1.10'
83
+ version: '1.25'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 1.25.2
81
87
  - !ruby/object:Gem::Dependency
82
88
  name: fiber-annotation
83
89
  requirement: !ruby/object:Gem::Requirement
@@ -98,34 +104,20 @@ dependencies:
98
104
  requirements:
99
105
  - - "~>"
100
106
  - !ruby/object:Gem::Version
101
- version: '1.5'
107
+ version: '1.6'
102
108
  - - ">="
103
109
  - !ruby/object:Gem::Version
104
- version: 1.5.1
110
+ version: 1.6.5
105
111
  type: :runtime
106
112
  prerelease: false
107
113
  version_requirements: !ruby/object:Gem::Requirement
108
114
  requirements:
109
115
  - - "~>"
110
116
  - !ruby/object:Gem::Version
111
- version: '1.5'
117
+ version: '1.6'
112
118
  - - ">="
113
119
  - !ruby/object:Gem::Version
114
- version: 1.5.1
115
- - !ruby/object:Gem::Dependency
116
- name: timers
117
- requirement: !ruby/object:Gem::Requirement
118
- requirements:
119
- - - "~>"
120
- - !ruby/object:Gem::Version
121
- version: '4.1'
122
- type: :runtime
123
- prerelease: false
124
- version_requirements: !ruby/object:Gem::Requirement
125
- requirements:
126
- - - "~>"
127
- - !ruby/object:Gem::Version
128
- version: '4.1'
120
+ version: 1.6.5
129
121
  description:
130
122
  email:
131
123
  executables: []
@@ -180,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
172
  - !ruby/object:Gem::Version
181
173
  version: '0'
182
174
  requirements: []
183
- rubygems_version: 3.5.3
175
+ rubygems_version: 3.5.11
184
176
  signing_key:
185
177
  specification_version: 4
186
178
  summary: A concurrency framework for Ruby.
metadata.gz.sig CHANGED
Binary file