๐ช Quick Start โ
๐ฆ Installation โ
Using pip โ
bash
pip install zoo-frameworkbash
pip install -e git+https://github.com/YearsAlso/zoo-framework.git#egg=zoo-frameworkInstall 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_projectThis 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 | ๐ string | Log file path | ./logs |
log.level | ๐ string | Log level | info |
worker.runPolicy | ๐๏ธ string | Worker policy | simple |
worker.pool.enabled | โ boolean | Enable thread pool | false |
worker.pool.size | ๐ข integer | Pool size | 5 |
๐ท Create a Worker โ
bash
zfc --worker helloThis 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
passAnd 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.pyExpected 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- ๐ท Deep dive into Worker โ
- ๐ฌ Learn Event System โ
- ๐ Master State Machine โ
- ๐ Understand FIFO โ
โ FAQ โ
Q: Worker not executing? โ
A: Ensure Worker is imported in workers/__init__.py:
python
from .hello_worker import HelloWorkerQ: 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: