14. Remote Task (in-memory compute)
App Mesh supports both process-level and code/task-level remote calls without injecting user code. Task-level remote execution provides in-memory compute capability, delivering extreme performance for high-throughput workloads.
14.1. Overview
Remote tasks allow a client to send a payload to App Mesh. App Mesh dispatches the payload to a running application process, which processes it and returns the result.
With request forwarding, you can achieve cluster-level task execution.
14.1.1. Client
The client sends a payload (task data) to App Mesh and waits for the response.
from appmesh import AppMeshClient
# Initialize the App Mesh Client
client = AppMeshClient()
if client.login("admin", "admin123"):
count_in_server = "0"
for i in range(10):
# task data
task_data = f"print({count_in_server}+{i}, end='')"
# remote invoke and get result
count_in_server = client.run_task(app_name="pytask", data=task_data)
# print
print(count_in_server)
14.1.2. Server
The server is the application process managed by App Mesh. It receives the payload, processes it, and returns the result.
from appmesh import AppMeshServer
if __name__ == "__main__":
# Minimal server loop: fetch a payload, execute it, return the output.
context = AppMeshServer()
while True:
# Block fetch invocation payload.
payload = context.task_fetch()
# Execute with payload and capture prints.
output = exec_with_output(payload)
# Return the result to the client
context.task_return(output)
14.1.3. Demo
$ appm ls
ID NAME OWNER STATUS HEALTH PID USER MEMORY %CPU RETURN AGE DURATION STARTS COMMAND
1 pytask mesh enabled OK 16412 32.7 MiB 0 1 8h 2 "python.exe ../../bi*"
2 pyexec mesh disabled - - - - - - 8h - 0 "python.exe ../../bi*"
3 ping mesh enabled OK - - - - 0 8h - 1 "ping github.com"
$ python3 sample.py
0
1
3
6
10
15
21
28
36
45
$ appm ls -a pytask | grep task_
task_id: 23
task_status: busy
14.1.4. Task status
The task status is represented by application runtime attributes. Possible values include:
idle: the service is ready and waiting for a taskbusy: a task has been dispatched and is currently processing
14.1.5. API
Client:
run_task(): send an invocation message to a running App Mesh application and wait for result
cancel_task(): cancle a running task to a App Mesh application
Note: Use AppMeshClient (HTTP) for short-lived requests and AppMeshClientTCP (TCP) for long-running workloads.
Server:
task_fetch(): retrieve a task data in the currently running App Mesh application process
task_return(): response the result of a server-side invocation back to the original client.