Hot Reload#

While developing your Flow, you may want it to reload automatically as you change the Flow YAML.

For this you can use the Flow’s reload argument to reload it with the updated configuration every time you change the YAML configuration.

Caution

This feature aims to let developers iterate faster while developing, but is not intended for production use.

Note

This feature requires watchfiles>=0.18 package to be installed.

To see how this works, let’s define a Flow in flow.yml with a reload option:

jtype: Flow
with:
  port: 12345
  reload: True
executors:
- name: exec1
  uses: ConcatenateTextExecutor

Build a Flow and expose it:

import os
from jina import Flow, Executor, requests


class ConcatenateTextExecutor(Executor):
    @requests
    def foo(self, docs, **kwargs):
        for doc in docs:
            doc.text += 'add text '


os.environ['JINA_LOG_LEVEL'] = 'DEBUG'


f = Flow.load_config('flow.yml')

with f:
    f.block()

You can see that the Flow is running and serving:

from jina import Client, DocumentArray

c = Client(port=12345)

print(c.post(on='/', inputs=DocumentArray.empty(1))[0].text)
add text

You can edit the Flow YAML file and save the changes:

jtype: Flow
with:
  port: 12345
  reload: True
executors:
- name: exec1
  uses: ConcatenateTextExecutor
- name: exec2
  uses: ConcatenateTextExecutor

You should see the following in the Flow’s logs:

INFO   [email protected] change in Flow YAML XXX/flow.yml observed, restarting Flow                                                   

After this, the Flow will have two Executors with the new topology:

from jina import Client, DocumentArray

c = Client(port=12345)

print(c.post(on='/', inputs=DocumentArray.empty(1))[0].text)
add text add text