Best Practices¶
Concurrent Actors¶
Your actor will run concurrently with other actors in the system. You need to be mindful of the impact this has on your database, any third party services you might be calling and the resources available on the systems running your workers. Additionally, you need to be mindful of data races between actors that manipulate the same objects in your database.
Retriable Actors¶
Dramatiq actors may receive the same message multiple times in the event of a worker failure (hardware, network or power failure). This means that, for any given message, running your actor multiple times must be safe. This is also known as being “idempotent”.
Simple Messages¶
Attempting to send an actor any object that can’t be encoded to JSON
by the standard json
package will fail immediately so you’ll want
to limit your actor parameters to the following object types: bool,
int, float, bytes, string, list and dict.
Additionally, since messages are sent over the wire you’ll want to
keep them as short as possible. For example, if you’ve got an actor
that operates over User
objects in your system, send that actor
the user’s id rather than the serialized user.
Error Reporting¶
Invariably, you’re probably going to introduce issues in production every now and then and some of those issues are going to affect your tasks. You should use an error reporting service such as Sentry so you get notified of these errors as soon as they occur.