DependencyProvider with an eventlet.pool?

Can a DependencyProvider create and manage it’s own eventlet GreenPool to facilitate long-running processes that a service needs to create/delete?

We have a scenario where we want a service to create a long-running query as needed, where the query process needs to outlive the service request instance that created it.

Thanks,

Bob

You could just send asynchronous message to the service and consume it without blocking any clients.

Example:

Publishing asynchronous message:
https://github.com/kooba/nameko-multi-region-example/blob/master/src/service.py#L79

Consuming the message:
https://github.com/kooba/nameko-multi-region-example/blob/master/src/service.py#L84

Jakub

The approach @Jakub_Borys mentions works great if you want to delegate the long-running query to another worker. Often this is the cleanest and most explicit way to do it.

It’s completely valid for a DependencyProvider to run a background thread though. The service container exposes the spawn_managed_thread for exactly this purpose.

The advantage of using spawn_managed_thread over your own GreenPool is that Nameko is made aware of the background threads. The container will terminate if a managed thread throws an uncaught exception, for example.

Thanks @Jakub_Borys, @mattbennett - that’s what I needed. I should have remembered spawn_managed_thread().