<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Andrii T. – Software Engineer</title>
    <link>https://drewg3r.dev/posts/</link>
    <description>Recent content in Posts on Andrii T. – Software Engineer</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 27 Jul 2025 12:00:00 +0000</lastBuildDate>
    <atom:link href="https://drewg3r.dev/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Don&#39;t Let Failed Tasks Stop Your Celery Chord Callback</title>
      <link>https://drewg3r.dev/posts/dont-let-failed-tasks-stop-chord-callback/</link>
      <pubDate>Sun, 27 Jul 2025 12:00:00 +0000</pubDate>
      <guid>https://drewg3r.dev/posts/dont-let-failed-tasks-stop-chord-callback/</guid>
      <description>&lt;h2 class=&#34;heading&#34; id=&#34;the-problem&#34;&gt;&#xA;  The problem&#xA;  &lt;a class=&#34;anchor&#34; href=&#34;#the-problem&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s start with a simplified real-world scenario: you need to process a large&#xA;number of contracts in parallel, and once they&amp;rsquo;re done, generate a report. The&#xA;reporting task analyzes the outcome of each contract, generates some fancy&#xA;charts for management and sends them via email.&lt;/p&gt;&#xA;&lt;p&gt;So, the workflow looks like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Schedule one task per contract and wait for them all to complete.&lt;/li&gt;&#xA;&lt;li&gt;Run a report task that aggregates the results and performs the analysis.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you’re familiar with &lt;a href=&#34;https://docs.celeryq.dev/&#34;&gt;Celery&lt;/a&gt;, this may sound&#xA;like a perfect use case for a &lt;code&gt;chord&lt;/code&gt;: run multiple tasks in parallel (the&#xA;&lt;em&gt;header&lt;/em&gt;), then execute a &lt;em&gt;callback&lt;/em&gt; once they all finish.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
