DependencyProvider with an eventlet.pool?

#1

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

#2

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

#3

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.

#4

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