Bogdanp / dramatiq

A fast and reliable background task processing library for Python 3.
https://dramatiq.io
GNU Lesser General Public License v3.0
4.37k stars 313 forks source link

Can I use time_limit in send_with_options/message_with_options? #44

Closed fizz closed 6 years ago

fizz commented 6 years ago

Use case: I have an actor that sometimes takes longer than 10 minutes to run. I can predict this. Let's say I want to double the default time_limit. If I use the decorator @actor(time_limit=1_200_000) then the actor will always have the 20-minute time_limit. I only want to increase the time_limit when I know I'm handing the actor a larger amount of work. Usually, I want it to have the default time_limit.

quirky_actor.message_with_options(args=(config.get('whats_my_motivation'),), time_limit=1_000*60*20)

I'm having a hard time figuring out if this even works. Should it work?

Bogdanp commented 6 years ago

That should work, but currently doesn't because the TimeLimit middleware only looks at actor options right now.

This line:

https://github.com/Bogdanp/dramatiq/blob/master/dramatiq/middleware/time_limit.py#L85

Should be:


limit = message.options.get("time_limit") or actor.options.get("time_limit", self.time_limit))

I'll put out a fix this weekend. Thanks for the report!