The first epoch would fill the “cache” in the original Dataset object using a single worker. The other epochs would then use multiple workers and reuse this cache, since each worker would create a copy of the dataset.
Note that this is not an optimal approach, but more a proof of concept.