Last active
November 29, 2018 06:18
-
-
Save objarni/6f9702fd5cc5edda7a46c959a3d082e3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: | |
... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.