async-pool 0.3.7 → 0.3.10

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: 36dfa0c90392d3f6e3582b1bdd3e2fdb7667ddccb601fb4dd34df3e8aa3baa2e
4
- data.tar.gz: bea9381873eed77a2fd9dcb4d90190e9fa3ebbbba0f38c5628ee369f5da58a97
3
+ metadata.gz: 5cfb2bc4d32b54e48faffdd3c42b28afa1841408ba0ebf175d9ca051ffd6e694
4
+ data.tar.gz: 4cf7f16990280ac4e7fb1b7d15759c2b372979a36c27b6ad437a0c006335bf83
5
5
  SHA512:
6
- metadata.gz: 7ece710c9d7ec8fcb62b92ae9fb19775de4f781f886a3b9e285f08a0a9483599bc15e6b5d727df7697202f1b11381cba5ebb731d84ad9236abc4c29d8293a508
7
- data.tar.gz: 02d545782a0b63b7ba74ce19a450ab7851886548eb71805c2fd9e5b71f8daf838c5dfbd5013b6bec2b639a2f630a5dfc846baaf9b28581cf53cb26d9b975290d
6
+ metadata.gz: cadc28962a1809997883f6f73c87701e4734582ed3fbfcb925a5777e35032cd2d89b1fa3ef71ce6719f8280c08c538e3460b72eea268cd30be3394635cf32606
7
+ data.tar.gz: abab1246d90ccc1663b13bcd6bed568cc672a9b211ac26ce8aeda5249badec6a4971c519689d03170e4a92a72b1669cc19cb7b108a5504bfcadaaecc80650a74
checksums.yaml.gz.sig ADDED
Binary file
@@ -31,7 +31,7 @@ module Async
31
31
  self.new(block, **options)
32
32
  end
33
33
 
34
- def initialize(constructor, limit: nil)
34
+ def initialize(constructor, limit: nil, concurrency: nil)
35
35
  # All available resources:
36
36
  @resources = {}
37
37
 
@@ -44,7 +44,15 @@ module Async
44
44
  @limit = limit
45
45
 
46
46
  @constructor = constructor
47
- @guard = Async::Semaphore.new(1)
47
+
48
+ # Set the concurrency to be the same as the limit for maximum performance:
49
+ if limit
50
+ concurrency ||= limit
51
+ else
52
+ concurrency ||= 1
53
+ end
54
+
55
+ @guard = Async::Semaphore.new(concurrency)
48
56
 
49
57
  @gardener = nil
50
58
  end
@@ -98,12 +106,14 @@ module Async
98
106
 
99
107
  # Make the resource resources and let waiting tasks know that there is something resources.
100
108
  def release(resource)
109
+ processed = false
110
+
101
111
  # A resource that is not good should also not be reusable.
102
112
  if resource.reusable?
103
- reuse(resource)
104
- else
105
- retire(resource)
113
+ processed = reuse(resource)
106
114
  end
115
+ ensure
116
+ retire(resource) unless processed
107
117
  end
108
118
 
109
119
  def close
@@ -164,6 +174,8 @@ module Async
164
174
  resource.close
165
175
 
166
176
  @notification.signal
177
+
178
+ return true
167
179
  end
168
180
 
169
181
  protected
@@ -199,13 +211,6 @@ module Async
199
211
  @resources.count{|resource, usage| usage == 0}
200
212
  end
201
213
 
202
- # @returns [Boolean] Whether the number of available resources is excessive and we should retire some.
203
- def overflowing?
204
- if @resources.any?
205
- (self.free.to_f / @resources.size) > 0.5
206
- end
207
- end
208
-
209
214
  def reuse(resource)
210
215
  Console.logger.debug(self) {"Reuse #{resource}"}
211
216
  usage = @resources[resource]
@@ -214,13 +219,6 @@ module Async
214
219
  raise "Trying to reuse unacquired resource: #{resource}!"
215
220
  end
216
221
 
217
- # We retire resources when adding to the @available list would overflow our pool:
218
- if usage == 1
219
- if overflowing?
220
- return retire(resource)
221
- end
222
- end
223
-
224
222
  # If the resource was fully utilized, it now becomes available:
225
223
  if usage == resource.concurrency
226
224
  @available.push(resource)
@@ -229,6 +227,8 @@ module Async
229
227
  @resources[resource] = usage - 1
230
228
 
231
229
  @notification.signal
230
+
231
+ return true
232
232
  end
233
233
 
234
234
  def wait_for_resource
@@ -58,6 +58,10 @@ module Async
58
58
 
59
59
  # Close the resource explicitly, e.g. the pool is being closed.
60
60
  def close
61
+ if @closed
62
+ raise "Already closed!"
63
+ end
64
+
61
65
  @closed = true
62
66
  end
63
67
 
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module Pool
23
- VERSION = "0.3.7"
23
+ VERSION = "0.3.10"
24
24
  end
25
25
  end
data.tar.gz.sig ADDED
Binary file
metadata CHANGED
@@ -1,27 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
+ - Olle Jonsson
9
+ - Simon Perepelitsa
8
10
  autorequire:
9
11
  bindir: bin
10
- cert_chain: []
11
- date: 2021-06-06 00:00:00.000000000 Z
12
+ cert_chain:
13
+ - |
14
+ -----BEGIN CERTIFICATE-----
15
+ MIIEhDCCAuygAwIBAgIBATANBgkqhkiG9w0BAQsFADA3MTUwMwYDVQQDDCxzYW11
16
+ ZWwud2lsbGlhbXMvREM9b3Jpb250cmFuc2Zlci9EQz1jby9EQz1uejAeFw0yMTA4
17
+ MTYwNjMzNDRaFw0yMjA4MTYwNjMzNDRaMDcxNTAzBgNVBAMMLHNhbXVlbC53aWxs
18
+ aWFtcy9EQz1vcmlvbnRyYW5zZmVyL0RDPWNvL0RDPW56MIIBojANBgkqhkiG9w0B
19
+ AQEFAAOCAY8AMIIBigKCAYEAyXLSS/cw+fXJ5e7hi+U/TeChPWeYdwJojDsFY1xr
20
+ xvtqbTTL8gbLHz5LW3QD2nfwCv3qTlw0qI3Ie7a9VMJMbSvgVEGEfQirqIgJXWMj
21
+ eNMDgKsMJtC7u/43abRKx7TCURW3iWyR19NRngsJJmaR51yGGGm2Kfsr+JtKKLtL
22
+ L188Wm3f13KAx7QJU8qyuBnj1/gWem076hzdA7xi1DbrZrch9GCRz62xymJlrJHn
23
+ 9iZEZ7AxrS7vokhMlzSr/XMUihx/8aFKtk+tMLClqxZSmBWIErWdicCGTULXCBNb
24
+ E/mljo4zEVKhlTWpJklMIhr55ZRrSarKFuW7en0+tpJrfsYiAmXMJNi4XAYJH7uL
25
+ rgJuJwSaa/dMz+VmUoo7VKtSfCoOI+6v5/z0sK3oT6sG6ZwyI47DBq2XqNC6tnAj
26
+ w+XmCywiTQrFzMMAvcA7rPI4F0nU1rZId51rOvvfxaONp+wgTi4P8owZLw0/j0m4
27
+ 8C20DYi6EYx4AHDXiLpElWh3AgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8E
28
+ BAMCBLAwHQYDVR0OBBYEFB6ZaeWKxQjGTI+pmz7cKRmMIywwMC4GA1UdEQQnMCWB
29
+ I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWB
30
+ I3NhbXVlbC53aWxsaWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEB
31
+ CwUAA4IBgQBVoM+pu3dpdUhZM1w051iw5GfiqclAr1Psypf16Tiod/ho//4oAu6T
32
+ 9fj3DPX/acWV9P/FScvqo4Qgv6g4VWO5ZU7z2JmPoTXZtYMunRAmQPFL/gSUc6aK
33
+ vszMHIyhtyzRc6DnfW2AiVOjMBjaYv8xXZc9bduniRVPrLR4J7ozmGLh4o4uJp7w
34
+ x9KCFaR8Lvn/r0oJWJOqb/DMAYI83YeN2Dlt3jpwrsmsONrtC5S3gOUle5afSGos
35
+ bYt5ocnEpKSomR9ZtnCGljds/aeO1Xgpn2r9HHcjwnH346iNrnHmMlC7BtHUFPDg
36
+ Ts92S47PTOXzwPBDsrFiq3VLbRjHSwf8rpqybQBH9MfzxGGxTaETQYOd6b4e4Ag6
37
+ y92abGna0bmIEb4+Tx9rQ10Uijh1POzvr/VTH4bbIPy9FbKrRsIQ24qDbNJRtOpE
38
+ RAOsIl+HOBTb252nx1kIRN5hqQx272AJCbCjKx8egcUQKffFVVCI0nye09v5CK+a
39
+ HiLJ8VOFx6w=
40
+ -----END CERTIFICATE-----
41
+ date: 2022-05-04 00:00:00.000000000 Z
12
42
  dependencies:
13
43
  - !ruby/object:Gem::Dependency
14
44
  name: async
15
45
  requirement: !ruby/object:Gem::Requirement
16
46
  requirements:
17
- - - "~>"
47
+ - - ">="
18
48
  - !ruby/object:Gem::Version
19
49
  version: '1.25'
20
50
  type: :runtime
21
51
  prerelease: false
22
52
  version_requirements: !ruby/object:Gem::Requirement
23
53
  requirements:
24
- - - "~>"
54
+ - - ">="
25
55
  - !ruby/object:Gem::Version
26
56
  version: '1.25'
27
57
  - !ruby/object:Gem::Dependency
@@ -38,34 +68,6 @@ dependencies:
38
68
  - - "~>"
39
69
  - !ruby/object:Gem::Version
40
70
  version: '1.1'
41
- - !ruby/object:Gem::Dependency
42
- name: bake-bundler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: bake-modernize
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
71
  - !ruby/object:Gem::Dependency
70
72
  name: bundler
71
73
  requirement: !ruby/object:Gem::Requirement
@@ -138,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
140
  - !ruby/object:Gem::Version
139
141
  version: '0'
140
142
  requirements: []
141
- rubygems_version: 3.3.0.dev
143
+ rubygems_version: 3.1.6
142
144
  signing_key:
143
145
  specification_version: 4
144
146
  summary: A singleplex and multiplex resource pool for implementing robust clients.
metadata.gz.sig ADDED
Binary file