Globus Flows Action Provider

funcX exposes an asynchronous Action Provider interface to allow functions to be used in a Globus Flow.

The funcX Action Provider interface uses:

Action Input Schema

The Action Provider input schema accepts a list of tasks, with each task requiring an endpoint, function, and payload field. The endpoint and function arguments are UUIDs and the payload is a dictionary of kwargs to be passed to the function.

'tasks': [{'endpoint.$': '<FUNCX ENDPOINT UUID>',
           'function': '<FUNCX FUNCTION UUID>',
           'payload.$': '<DICT OF INPUT ARGS>'}],

When defining a funcX function to use within a flow it is recommended to define the specific kwargs that will be passed in as payload. If the kwargs are not known, a function can be defined to accept arbitrary kwargs using the ** operator, e.g.:

'Parameters': {'tasks': [{'endpoint.$': '$.input.fx_ep',
                          'function': '$.input.fx_fn',
                          'payload.$': '$.input'}]},

def my_function(**data):
    ...

Gladier

The Gladier toolkit provides useful tools to simplify and accelerate the development of flows that use funcX. For example, Gladier validates inputs prior to starting a flow and will re-register functions when they are modified. Additionally, it includes capabilities to automatically generate flow definitions.