Skip to content
/ farc Public

Framework for state machines with run-to-completion concurrency using asyncio. Python 3.4 or later

License

Notifications You must be signed in to change notification settings

dwhall/farc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

farc

Framework for Asyncio/Actor/AHSM Run-to-completion Concurrency written in Python3. In other words, a cheap knock-off of QP that uses Python3 coroutines. This book describes QP and how to program statecharts(a.k.a. hierarchical state machines).

This package is 100% Python with no required external dependencies. This framework has fewer than 1000 LOC. It allows the programmer to create highly-concurrent programs by using a message-passing system and run-to-completion message handlers within a state-machine architecture. With these tools, complex, asynchronous operations are decomposed into managable chunks of code.

Known Issue: On windows, Ctrl+C is supressed by asyncio event loop's run_forever() (bug report). The workaround is to inject an event to awake the event loop.

Note: This project used to be called "pq" but that name was taken in PyPI, so I renamed to farc (ugh).

Code Repository

https://github.com/dwhall/farc

Release History

2020/11/07 0.2.0

  • BREAKS API: Removed initEvent argument from Ahsm.start()
  • BREAKS API: Renamed camel-case procedures with underscores
  • BREAKS API: Eliminated @staticmethod and use of "me"
  • BREAKS API: Removed VcdSpy (debug helper) class from default namespace
  • Serialize Event values using pickle. This might lead to a runtime error for some.
  • call Framework.run() as soon as possible when an event is posted to AHSM (Max Peng).
  • Reimplement HSM algorithm and include hsm_test (Sze Tan)
  • Consolidated all files into __init__.py

2019/05/15 0.1.1

  • Removed 'initialState' argument from farc.Hsm() constructor; framework now expects Hsm/Ahsm classes to have 'initial()' method.
  • Made state methods private in examples to demonstrate a best-practice.
  • Created farc.Framework.run_forever() helper function.
  • Misc comment and doctring improvements

2018/10/09 0.1.0 Initial release

About

Framework for state machines with run-to-completion concurrency using asyncio. Python 3.4 or later

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages