Skip to content

Instantly share code, notes, and snippets.

@objarni
Last active November 29, 2018 06:18
Show Gist options
  • Save objarni/6f9702fd5cc5edda7a46c959a3d082e3 to your computer and use it in GitHub Desktop.
Save objarni/6f9702fd5cc5edda7a46c959a3d082e3 to your computer and use it in GitHub Desktop.
import qp
async def backup_procedure():
async def zip_folder(folder, archive_file):
# ???
backup_fn = # ...
backup_folder = # ...
await zip_folder(backup_folder, backup_fn)
qp.publish(qif.BACKUP_DONE)
class BackupFsm(qp.Hsm):
def __init__(self, global_nursery):
self.nursery = global_nursery # We need background task ability
def dormant(self, sig, par):
if sig == qif.START_BACKUP:
self.nursery.start_soon(backup_procedure)
qp.trans(self, BackupFsm.active)
return qp.Hsm.Top
def active(self, sig, par):
if sig == qif.BACKUP_DONE:
qp.trans(self, BackupFsm.dormant)
return qp.Hsm.Top
# nånstans i main-koden:
async with trio.open_nursery as global_nursery:
...
@objarni
Copy link
Author

objarni commented Nov 28, 2018

Möjligen behöver alla def's ha async keyword framför.

Men semantiken blir ju i princip att ha en "global" nursery, d.v.s konceptuellt väldigt likt att ha "fria trådar" förutom då att allt exekveras i en enda tråd (vilket ju kan ses som en stor fördel).

En stor nackdel är dock att backup_procedure behöver använda asynk-i/o för att inte blocka alla andra tasks/fsm's.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment