Skip to content

๐ŸŽช Quick Start โ€‹

๐Ÿ“ฆ Installation โ€‹

Using pip โ€‹

bash
pip install zoo-framework
bash
pip install -e git+https://github.com/YearsAlso/zoo-framework.git#egg=zoo-framework

Install from Source โ€‹

bash
git clone https://github.com/YearsAlso/zoo-framework.git
cd zoo-framework
pip install -e .

๐ŸŽฏ Create Your First Project โ€‹

1๏ธโƒฃ Create Project with CLI โ€‹

bash
zfc --create my_first_project
cd my_first_project

This creates the following structure:

my_first_project/
โ”œโ”€โ”€ ๐Ÿ“„ config.json          # Configuration
โ”œโ”€โ”€ ๐Ÿ“ src/                 # Source code
โ”‚   โ”œโ”€โ”€ ๐Ÿš€ main.py         # Entry point
โ”‚   โ”œโ”€โ”€ ๐Ÿ‘ท workers/        # Workers
โ”‚   โ”‚   โ””โ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ฌ events/         # Events
โ”‚   โ”‚   โ””โ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ โš™๏ธ conf/           # Config
โ”‚   โ”‚   โ””โ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ ๐Ÿ“‹ params/         # Parameters
โ”‚       โ””โ”€โ”€ __init__.py
โ””โ”€โ”€ ๐Ÿ“ logs/               # Logs

๐Ÿ“„ config.json โ€‹

json
{
  "_exports": [],
  "๐Ÿ“ log": {
    "๐Ÿ“ path": "./logs",
    "๐Ÿ“Š level": "debug"
  },
  "๐Ÿ‘ท worker": {
    "๐ŸŽ›๏ธ runPolicy": "simple",
    "๐ŸŠ pool": {
      "๐Ÿ”ข size": 5,
      "โœ… enabled": false
    }
  }
}

Configuration options:

๐Ÿ”ง Option๐Ÿ“‹ Type๐Ÿ“ Description๐Ÿ”ข Default
log.path๐Ÿ“ stringLog file path./logs
log.level๐Ÿ“Š stringLog levelinfo
worker.runPolicy๐ŸŽ›๏ธ stringWorker policysimple
worker.pool.enabledโœ… booleanEnable thread poolfalse
worker.pool.size๐Ÿ”ข integerPool size5

๐Ÿ‘ท Create a Worker โ€‹

bash
zfc --worker hello

This creates src/workers/hello_worker.py:

python
from zoo_framework.workers.base_worker import BaseWorker


class HelloWorker(BaseWorker):
    def __init__(self):
        BaseWorker.__init__(self, {
            "is_loop": True,
            "delay_time": 5,
            "name": "HelloWorker"
        })

    def _destroy(self, result):
        pass

    def _execute(self):
        # ๐Ÿ“ Write your business logic here
        pass

And registers it in src/workers/__init__.py:

python
from .hello_worker import HelloWorker

๐Ÿ’ป Write Business Code โ€‹

Edit src/workers/hello_worker.py:

python
from zoo_framework.workers import BaseWorker
from zoo_framework.utils import LogUtils


class HelloWorker(BaseWorker):
    """
    ๐Ÿ‘‹ Welcome Worker - Demo basic functionality
    """
    
    def __init__(self):
        super().__init__({
            "is_loop": True,      # ๐Ÿ”„ Loop execution
            "delay_time": 2,      # โฑ๏ธ Every 2 seconds
            "name": "HelloWorker" # ๐Ÿท๏ธ Worker name
        })
        self.counter = 0

    def _destroy(self, result):
        """
        ๐Ÿ—‘๏ธ Cleanup callback - called when worker stops
        """
        LogUtils.info(f"๐Ÿ‘‹ Worker finished, executed {result} times")

    def _execute(self):
        """
        โšก Business logic - must implement
        """
        self.counter += 1
        LogUtils.info(f"โœจ Hello Zoo Framework! Count: {self.counter}")

๐Ÿš€ Launch Application โ€‹

Edit src/main.py:

python
from zoo_framework.core import Master

def main():
    """
    ๐Ÿš€ Application entry
    """
    # ๐ŸŽฏ Create Master instance
    master = Master(loop_interval=1)
    
    # โ–ถ๏ธ Run application
    master.run()

if __name__ == "__main__":
    main()

Run:

bash
cd src
python main.py

Expected output:

[๐Ÿ“… 2024-01-15 10:00:00] [INFO] ๐Ÿš€ Zoo Framework started
[๐Ÿ“… 2024-01-15 10:00:00] [INFO] ๐Ÿ‘ท HelloWorker registered
[๐Ÿ“… 2024-01-15 10:00:02] [INFO] โœจ Hello Zoo Framework! Count: 1
[๐Ÿ“… 2024-01-15 10:00:04] [INFO] โœจ Hello Zoo Framework! Count: 2
[๐Ÿ“… 2024-01-15 10:00:06] [INFO] โœจ Hello Zoo Framework! Count: 3
...

๐Ÿ—๏ธ Project Architecture โ€‹

mermaid
flowchart TB
    subgraph "๐ŸŽฏ Application"
        M[๐ŸŽ›๏ธ Master<br/>Control Center]
    end
    
    subgraph "๐Ÿ”„ Scheduling"
        W[๐ŸŽ›๏ธ Waiter<br/>Execution Policy]
    end
    
    subgraph "๐Ÿ‘ท Workers"
        W1[๐Ÿ‘ท Worker 1<br/>Loop Task]
        W2[๐Ÿ‘ท Worker 2<br/>Event Driven]
        W3[๐Ÿ‘ท Worker 3<br/>One-time]
    end
    
    subgraph "๐Ÿ“ฌ Communication"
        E[๐Ÿ“ฌ EventChannel<br/>Event Channel]
        F[๐Ÿ“Š EventFIFO<br/>Priority Queue]
    end
    
    subgraph "๐Ÿ’พ Persistence"
        S[๐Ÿ”„ StateMachine<br/>State Management]
        L[๐Ÿ“ LogUtils<br/>Logging]
    end
    
    M --> W
    W --> W1
    W --> W2
    W --> W3
    W1 --> E
    W2 --> F
    W3 --> S
    W1 --> L
    W2 --> L
    W3 --> L

๐Ÿ“š Core Concepts โ€‹

๐Ÿ‘ท Worker - The Animal โ€‹

Workers are the basic execution units:

python
from zoo_framework.workers import BaseWorker

class MyWorker(BaseWorker):
    def __init__(self):
        super().__init__({
            "is_loop": True,      # ๐Ÿ”„ Loop or not
            "delay_time": 1,      # โฑ๏ธ Execution interval
            "name": "MyWorker"    # ๐Ÿท๏ธ Name
        })
    
    def _execute(self):
        # โšก Business logic
        pass

๐Ÿ“ฌ Events โ€‹

Event-driven mechanism:

python
from zoo_framework.event import EventChannelRegister
from zoo_framework.fifo import EventFIFO
from zoo_framework.fifo.node import EventNode

# ๐Ÿ“ค Create event
node = EventNode(
    topic="user.login",
    content={"user_id": 123, "name": "John"},
    priority=10
)

# ๐Ÿ“จ Send event
EventChannelRegister.get_channel("default").push(node)

๐Ÿ”„ State Machine โ€‹

Manage state transitions:

python
from zoo_framework.statemachine import StateMachineManager

# ๐ŸŽฏ Create state machine
sm = StateMachineManager()
sm.create_state_machine("order")

# โž• Add states
sm.add_state("order", "created")
sm.add_state("order", "paid")
sm.add_state("order", "shipped")

# ๐Ÿ”„ Transition
sm.transfer("order", "created", "paid")

๐Ÿ—บ๏ธ Learning Path โ€‹

mermaid
graph LR
    A[๐Ÿš€ Quick Start] --> B[๐Ÿ‘ท Worker]
    A --> C[๐Ÿ“ฌ Event System]
    A --> D[๐Ÿ”„ State Machine]
    B --> E[๐ŸŽ›๏ธ Waiter]
    C --> F[๐Ÿ“Š FIFO]
    D --> G[โœ‚๏ธ AOP]
    E --> H[๐Ÿ”Œ Plugin]
    F --> H
    G --> H
  1. ๐Ÿ‘ท Deep dive into Worker โ†’
  2. ๐Ÿ“ฌ Learn Event System โ†’
  3. ๐Ÿ”„ Master State Machine โ†’
  4. ๐Ÿ“Š Understand FIFO โ†’

โ“ FAQ โ€‹

Q: Worker not executing? โ€‹

A: Ensure Worker is imported in workers/__init__.py:

python
from .hello_worker import HelloWorker

Q: How to debug? โ€‹

A: Set log level to debug:

json
{
  "log": {
    "level": "debug"
  }
}

Q: How to stop Worker? โ€‹

A: Set is_loop = False:

python
def __init__(self):
    super().__init__({
        "is_loop": False,  # ๐Ÿ”ด Execute once
        "name": "OneTimeWorker"
    })

๐ŸŽ‰ Congratulations! โ€‹

You've completed your first Zoo Framework project! ๐ŸŽŠ

Continue exploring:

ๅŸบไบŽ MIT ่ฎธๅฏๅ‘ๅธƒ