Examples¶
Real-world examples demonstrating ZeroIPC usage patterns.
Example Categories¶
Cross-Language Communication¶
Examples of C++, Python, and C processes communicating:
- C++ producer, Python consumer
- Python producer, C++ consumer
- Multi-language pipeline
- Bidirectional messaging
Producer-Consumer¶
Classic producer-consumer patterns:
- Single producer, single consumer
- Multiple producers, single consumer
- Single producer, multiple consumers
- Work stealing queue
Sensor Data Sharing¶
IoT and sensor data examples:
- Temperature monitoring
- Multi-sensor aggregation
- Real-time data visualization
- Historical data buffering
Reactive Processing¶
Event-driven programming with streams:
- Stream transformations (map, filter)
- Event aggregation
- Real-time analytics
- Backpressure handling
Real-Time Analytics¶
High-performance data processing:
- Sliding window calculations
- Real-time aggregations
- Pattern detection
- Alert generation
Quick Examples¶
1. Simple Data Sharing¶
Share an array between C++ and Python.
#include <zeroipc/memory.h>
#include <zeroipc/array.h>
int main() {
zeroipc::Memory mem("/demo", 1024*1024);
zeroipc::Array<double> data(mem, "values", 100);
for (int i = 0; i < 100; ++i) {
data[i] = i * 1.5;
}
std::cout << "Data ready. Press Ctrl+C to exit.\n";
std::this_thread::sleep_for(std::chrono::hours(1));
}
2. Work Queue¶
Distribute tasks across worker processes.
#include <zeroipc/memory.h>
#include <zeroipc/queue.h>
struct Task {
int id;
char data[64];
};
int main() {
zeroipc::Memory mem("/tasks", 10*1024*1024);
zeroipc::Queue<Task> queue(mem, "work", 1000);
// Add tasks
for (int i = 0; i < 1000; ++i) {
Task t{i, "process_image"};
queue.enqueue(t);
}
std::cout << "Added 1000 tasks\n";
}
from zeroipc import Memory, Queue
import numpy as np
# Define matching dtype
task_dtype = np.dtype([
('id', np.int32),
('data', 'S64')
])
mem = Memory("/tasks")
queue = Queue(mem, "work", dtype=task_dtype)
while True:
task = queue.dequeue()
if task is not None:
process_task(task)
else:
break # No more tasks
3. Real-Time Stream Processing¶
Process sensor data with reactive streams.
#include <zeroipc/memory.h>
#include <zeroipc/stream.h>
struct Reading {
double temperature;
double pressure;
uint64_t timestamp;
};
int main() {
zeroipc::Memory mem("/sensors", 10*1024*1024);
zeroipc::Stream<Reading> stream(mem, "raw", 1000);
while (running) {
Reading r = read_sensor();
stream.emit(r);
std::this_thread::sleep_for(100ms);
}
}
zeroipc::Memory mem("/sensors");
zeroipc::Stream<Reading> raw(mem, "raw");
// Create derived streams
auto high_temp = raw.filter(mem, "alerts",
[](Reading& r) { return r.temperature > 30.0; });
auto celsius_to_f = raw.map(mem, "fahrenheit",
[](Reading& r) {
Reading f = r;
f.temperature = r.temperature * 9/5 + 32;
return f;
});
// Subscribe to alerts
high_temp.subscribe([](Reading& r) {
send_alert("High temperature: " + std::to_string(r.temperature));
});
Example Repository¶
All examples with build files and instructions:
git clone https://github.com/yourusername/zeroipc.git
cd zeroipc/examples
# Each example has its own directory
ls -la
# basic/
# cross_language/
# producer_consumer/
# sensors/
# streams/
# analytics/
Each example includes: - README.md - What it demonstrates - Makefile or CMakeLists.txt - Build instructions - C++ source - Complete working code - Python source - Complete working code - run.sh - Helper script to run the example
Building Examples¶
C++ Examples¶
Python Examples¶
Next Steps¶
Explore specific examples:
- Cross-Language - Language interop
- Producer-Consumer - Work distribution
- Sensor Data - IoT patterns
- Reactive Processing - Event-driven
- Analytics - Real-time processing