@@ -26,8 +26,8 @@ <h1>A production worker for Django Tasks</h1>
2626 no Redis, nothing new to operate.</ p >
2727 < p class ="hero-sub "> The part that matters: < code > enqueue()</ code > is a plain INSERT on your
2828 default connection, so a task enqueued inside < code > transaction.atomic()</ code > commits
29- or rolls back together with your business data. A broker architecture cannot do this.
30- There is no window where an order exists without its email task, and no
29+ or rolls back together with your business data. A broker cannot share your database
30+ transaction. There is no window where an order exists without its email task, and no
3131 < code > on_commit</ code > boilerplate.</ p >
3232
3333 < figure class ="txn ">
@@ -47,9 +47,9 @@ <h2>Measured, not promised</h2>
4747 versus 69 to 70 with a single worker. In-transaction enqueue latency was a tie, about
4848 half a millisecond at p50 for both.</ p >
4949 < p > Reliability got the same treatment: 21 minutes of sustained load on PostgreSQL 16,
50- 37,802 tasks, while workers were repeatedly SIGKILLed mid-task. Every task reached a
51- terminal state, zero were lost, zero completed twice, and interrupted work was
52- reclaimed inside the documented bound.</ p >
50+ 37,802 tasks, including nine minutes in which workers were repeatedly SIGKILLed
51+ mid-task. Every task reached a terminal state, zero were lost, zero completed twice in
52+ that run, and interrupted work was reclaimed inside the documented bound.</ p >
5353 < p class ="caveat "> No-op benchmarks flatter every queue, so read these as relative, not as
5454 capacity planning. The full methodology, every run, and the raw per-sample data ship in
5555 the repository.</ p >
@@ -74,7 +74,8 @@ <h3><span data-package>django-ox</span> <span class="tag">BSD-3 · free fo
7474 < li > Recurring schedules, cron syntax</ li >
7575 < li > Pruning command for finished rows</ li >
7676 </ ul >
77- < p class ="note "> PostgreSQL, MySQL 8+, and SQLite. Live now:
77+ < p class ="note "> PostgreSQL and SQLite, tested in CI; MySQL 8+ via the same
78+ SKIP LOCKED path. Live now:
7879 < code > pip install django-ox</ code > ·
7980 < a href ="https://github.com/oxpull/django-ox "> GitHub</ a > ·
8081 < a href ="https://oxpull.github.io/django-ox/ "> docs</ a > .</ p >
@@ -110,8 +111,8 @@ <h2>Pricing, and the waitlist</h2>
110111 < button type ="submit "> Join the waitlist</ button >
111112 </ form >
112113 < p id ="form-error " hidden > That didn't go through. Check the address and try again.</ p >
113- < p class ="privacy "> Your email is used only to tell you when Pro launches. No newsletter,
114- no sharing, no analytics on this page. One line to delete it: reply "remove" .</ p >
114+ < p class ="privacy "> Your email is used only to tell you when Pro launches. Reply
115+ "remove" and it is deleted .</ p >
115116 </ div >
116117 </ section >
117118
@@ -126,8 +127,8 @@ <h3>What is the license situation?</h3>
126127
127128 < h3 > When does this ship?</ h3 >
128129 < p > The open source worker is live: < code > pip install django-ox</ code > , with
129- < a href ="https://oxpull.github.io/django-ox/ "> documentation here</ a > . Pro follows once
130- the core has production miles on it . Waitlist email is the announcement channel.</ p >
130+ < a href ="https://oxpull.github.io/django-ox/ "> documentation here</ a > . Pro follows as
131+ the core accumulates production miles. Waitlist email is the announcement channel.</ p >
131132
132133 < h3 > Who is behind it?</ h3 >
133134 < p > An independent software vendor with one product: this one. You will know who
0 commit comments