omq-ractor 0.1.7 → 0.1.8
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 +4 -4
- data/lib/omq/ractor.rb +11 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc8588dc4362b294801c75c4c34f494bf9f5958fc4c772464ed0ed3f4000e1ad
|
|
4
|
+
data.tar.gz: d35730efb57a69a74df32763a70f6a94b22eda3db681408b6f9407ddcab398de
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8ddedd9fac719c1b7ccffbc29931bf7647139c69dc965844f09eb526601f9c2a7501b635ce3381ccae81e1b4d137cc758e9345cd98ba1c037dae6ea7b30447ac
|
|
7
|
+
data.tar.gz: 56f0e7e5795151c47a0363341831c4e6a6e6d6450b5e51fb5302865d0d0d64dd28ee05428acecf40db00e8e7ac916392bf6b18347550d12ed910483fb907b800
|
data/lib/omq/ractor.rb
CHANGED
|
@@ -398,6 +398,14 @@ module OMQ
|
|
|
398
398
|
serialize: serialize, topic_type: topic_type }
|
|
399
399
|
end
|
|
400
400
|
|
|
401
|
+
# REQ/REP input bridges must wait for the matching send before reading
|
|
402
|
+
# again. REP starts with a receive; REQ starts with a send.
|
|
403
|
+
@receive_permits = sockets.map do |socket|
|
|
404
|
+
next unless socket.is_a?(REQ) || socket.is_a?(REP)
|
|
405
|
+
|
|
406
|
+
Async::Queue.new.tap { |queue| queue.enqueue(true) if socket.is_a?(REP) }
|
|
407
|
+
end
|
|
408
|
+
|
|
401
409
|
|
|
402
410
|
# Main Ractor creates output ports (one per writable socket)
|
|
403
411
|
@output_ports = socket_configs.map { |cfg| cfg[:writable] ? ::Ractor::Port.new : nil }
|
|
@@ -548,9 +556,11 @@ module OMQ
|
|
|
548
556
|
|
|
549
557
|
do_serialize = socket_configs[i][:serialize]
|
|
550
558
|
topic_type = socket_configs[i][:topic_type]
|
|
559
|
+
permit = @receive_permits[i]
|
|
551
560
|
|
|
552
561
|
@input_tasks << @parent_task.async(transient: true, annotation: "ractor input bridge") do
|
|
553
562
|
loop do
|
|
563
|
+
permit&.dequeue
|
|
554
564
|
msg = socket.receive
|
|
555
565
|
if do_serialize && !topic_type
|
|
556
566
|
msg = msg.first
|
|
@@ -607,6 +617,7 @@ module OMQ
|
|
|
607
617
|
while (msg = queue.pop(true) rescue nil)
|
|
608
618
|
parts = msg.is_a?(Array) ? msg : [msg]
|
|
609
619
|
engine.enqueue_send(parts)
|
|
620
|
+
@receive_permits[i]&.enqueue(true)
|
|
610
621
|
end
|
|
611
622
|
rescue IOError, Async::Stop
|
|
612
623
|
break
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: omq-ractor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Patrik Wenger
|
|
@@ -51,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: '0'
|
|
53
53
|
requirements: []
|
|
54
|
-
rubygems_version: 4.0.
|
|
54
|
+
rubygems_version: 4.0.20
|
|
55
55
|
specification_version: 4
|
|
56
56
|
summary: Bridge OMQ sockets into Ruby Ractors for true parallel processing
|
|
57
57
|
test_files: []
|