|
7 | 7 | from functools import wraps |
8 | 8 | import time |
9 | 9 | from contextlib import contextmanager |
| 10 | +import copy |
10 | 11 |
|
11 | 12 | import attr |
12 | 13 | import grpc |
@@ -267,19 +268,24 @@ async def save(self): |
267 | 268 | logging.debug("Running Save") |
268 | 269 | self.save_scheduled = False |
269 | 270 |
|
270 | | - with warn_if_slow("dump resources"): |
271 | | - resources = self._get_resources() |
272 | | - resources = yaml.dump(resources) |
273 | | - resources = resources.encode() |
274 | | - with warn_if_slow("dump places"): |
275 | | - places = self._get_places() |
276 | | - places = yaml.dump(places) |
277 | | - places = places.encode() |
278 | | - |
279 | | - logging.debug("Awaiting resources") |
280 | | - await self.loop.run_in_executor(None, atomic_replace, "resources.yaml", resources) |
281 | | - logging.debug("Awaiting places") |
282 | | - await self.loop.run_in_executor(None, atomic_replace, "places.yaml", places) |
| 271 | + with warn_if_slow("create resources snapshot"): |
| 272 | + resources = copy.deepcopy(self._get_resources()) |
| 273 | + with warn_if_slow("create places snapshot"): |
| 274 | + places = copy.deepcopy(self._get_places()) |
| 275 | + |
| 276 | + def save_sync(resources, places): |
| 277 | + with warn_if_slow("dump resources"): |
| 278 | + resources = yaml.dump(resources) |
| 279 | + resources = resources.encode() |
| 280 | + with warn_if_slow("dump places"): |
| 281 | + places = yaml.dump(places) |
| 282 | + places = places.encode() |
| 283 | + with warn_if_slow("write resources"): |
| 284 | + atomic_replace("resources.yaml", resources) |
| 285 | + with warn_if_slow("write places"): |
| 286 | + atomic_replace("places.yaml", places) |
| 287 | + |
| 288 | + await self.loop.run_in_executor(None, save_sync, resources, places) |
283 | 289 |
|
284 | 290 | def load(self): |
285 | 291 | try: |
|
0 commit comments