Skip to content

Commit 883c73a

Browse files
committed
Add service API for using main thread queue
1 parent e4f0fda commit 883c73a

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/appose/service.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,20 @@ def start(self) -> None:
109109
self._stderr_thread.start()
110110
self._monitor_thread.start()
111111

112-
def task(self, script: str, inputs: Args | None = None) -> "Task":
112+
def task(
113+
self, script: str, inputs: Args | None = None, queue: str | None = None
114+
) -> "Task":
113115
"""
114116
Create a new task, passing the given script to the worker for execution.
115117
:param script:
116118
The script for the worker to execute in its environment.
117119
:param inputs:
118120
Optional list of key/value pairs to feed into the script as inputs.
121+
:param queue:
122+
Optional queue target. Pass "main" to queue to worker's main thread.
119123
"""
120124
self.start()
121-
return Task(self, script, inputs)
125+
return Task(self, script, inputs, queue)
122126

123127
def close(self) -> None:
124128
"""
@@ -298,12 +302,17 @@ class Task:
298302
"""
299303

300304
def __init__(
301-
self, service: Service, script: str, inputs: Args | None = None
305+
self,
306+
service: Service,
307+
script: str,
308+
inputs: Args | None = None,
309+
queue: str | None = None,
302310
) -> None:
303311
self.uuid = uuid4().hex
304312
self.service = service
305313
self.script = script
306314
self.inputs: Args = {}
315+
self.queue: str | None = queue
307316
if inputs is not None:
308317
self.inputs.update(inputs)
309318
self.outputs: Args = {}
@@ -323,7 +332,7 @@ def start(self) -> "Task":
323332

324333
self.status = TaskStatus.QUEUED
325334

326-
args = {"script": self.script, "inputs": self.inputs}
335+
args = {"script": self.script, "inputs": self.inputs, "queue": self.queue}
327336
self._request(RequestType.EXECUTE, args)
328337

329338
return self

tests/test_appose.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ def sqrt_age(age):
6464
task.outputs["result"] = sqrt_age(age)
6565
"""
6666

67+
main_thread_check = """
68+
import threading
69+
task.outputs["thread"] = threading.current_thread().name
70+
"""
71+
6772

6873
def test_groovy():
6974
env = appose.system()
@@ -105,6 +110,22 @@ def test_scope():
105110
assert result == 10
106111

107112

113+
def test_main_thread_queue():
114+
env = appose.system()
115+
with env.python() as service:
116+
task = service.task(main_thread_check, queue="main")
117+
task.start()
118+
task.wait_for()
119+
thread = task.outputs.get("thread")
120+
assert thread == "MainThread"
121+
122+
task = service.task(main_thread_check)
123+
task.start()
124+
task.wait_for()
125+
thread = task.outputs.get("thread")
126+
assert thread != "MainThread"
127+
128+
108129
def execute_and_assert(service: Service, script: str):
109130
task = service.task(script)
110131

0 commit comments

Comments
 (0)