Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
[DC CODES - 11 + Some Extra] EXP1 (Distributed Banking System): import threading,time,queue,random class Node: def __init__(self,id,allnodes): self.id=id self.allnodes=allnodes self.leader=None self.clock=0 self.alive=True self.inbox=queue.Queue() self.got_ok=False self.balance=100 def send(self,o,m): if o.alive: o.inbox.put((self.id,m)) def broadcast(self,m): for n in self.allnodes: if n!=self: self.send(n,m) def start_election(self,ctr): self.got_ok=False higher=[n for n in self.allnodes if n.id>self.id and n.alive] for h in higher: self.send(h,{'t':'el','src':self.id,'ctr':ctr}) time.sleep(1) if not self.got_ok: self.leader=self.id for n in self.allnodes: if n!=self: self.send(n,{'t':'co','l':self.id}) ctr[0]+=1 def handle(self,src,m): if m['t']=='el': self.send(self.allnodes[src-1],{'t':'ok'}) threading.Thread(target=self.start_election,args=(m['ctr'],)).start() elif m['t']=='ok': self.got_ok=True elif m['t']=='co': self.leader=m['l'] elif m['t']=='tx': self.clock=max(self.clock,m['ts'])+1 if m['op'][0]=="D": self.balance+=m['op'][1] else: self.balance-=m['op'][1] print(f"Node{self.id} applied {m['op'][0]} {m['op'][1]} @lc={self.clock} bal={self.balance}") elif m['t']=='sync': self.balance=m['bal'] def heartbeat(self): while True: time.sleep(1) if self.leader==self.id: self.broadcast({'t':'hb','ts':time.time()}) def run(self): while True: try: src,m=self.inbox.get(timeout=0.5) if m['t']=='hb': pass else: self.handle(src,m) except: pass def client_worker(nodes,runflag): while runflag[0]: leader=[n for n in nodes if n.leader==n.id and n.alive] if leader: ld=leader[0] ld.clock+=1 ts=ld.clock op=random.choice([("D",10),("W",5)]) ld.balance=ld.balance+(10 if op[0]=="D" else -5) ld.broadcast({'t':'tx','op':op,'ts':ts}) for n in nodes: if n!=ld and n.alive: ld.send(n,{'t':'sync','bal':ld.balance}) time.sleep(1) def monitor(nodes,ctr): last=time.time() while True: time.sleep(2) leader=[n for n in nodes if n.leader==n.id and n.alive] if not leader: continue l=leader[0] if not l.alive or time.time()-last>3: print("Leader crashed, starting election") live=[n for n in nodes if n.alive] highest=max(live,key=lambda x:x.id) highest.start_election(ctr) last=time.time() def simulate(): print("Using Lamport Logical Clocks because they guarantee consistent ordering without relying on physical time") print("Enter number of servers:") n=int(input().strip()) nodes=[Node(i,[]) for i in range(1,n+1)] for nd in nodes: nd.allnodes=nodes for nd in nodes: threading.Thread(target=nd.run,daemon=True).start() for nd in nodes: threading.Thread(target=nd.heartbeat,daemon=True).start() print("Enter node to trigger election:") start=int(input().strip()) ec=[0] nodes[start-1].start_election(ec) time.sleep(2) leader=[x for x in nodes if x.leader==x.id] if leader: leader=leader[0] print("Leader elected:",leader.id) else: print("Election failed") return runflag=[True] threading.Thread(target=client_worker,args=(nodes,runflag),daemon=True).start() threading.Thread(target=monitor,args=(nodes,ec),daemon=True).start() print("\nSimulating crash in 6 seconds...") time.sleep(6) print("Crashing leader",leader.id) leader.alive=False time.sleep(8) runflag[0]=False print("\nFinal balances:") for nd in nodes: print("Node",nd.id,"alive=",nd.alive,"bal=",nd.balance) print("Used",ec[0],"election cycles") if __name__=="__main__": simulate() ===================================================================================================================================== EXP2 (Remote Code Execution Engine): [client] import socket def client(): s=socket.socket() s.connect(("localhost",9000)) print("Connected") while True: x=input("send expr: ") if x=="exit": break s.send(x.encode()) print("result:",s.recv(1024).decode()) client() [server] import socket,threading,queue,ast tasks=queue.Queue() def safe_exec(expr): tree=ast.parse(expr,mode='eval') for n in ast.walk(tree): if not isinstance(n,(ast.Expression,ast.Num,ast.BinOp,ast.UnaryOp,ast.Add,ast.Sub,ast.Mult,ast.Div,ast.Mod,ast.Pow,ast.Load)): return "invalid" return str(eval(expr)) def worker(c,a): while True: try: data=c.recv(1024).decode() if not data: break out=safe_exec(data.strip()) c.send(out.encode()) except: break c.close() def server(): s=socket.socket() s.bind(("localhost",9000)) s.listen(5) print("Server ready") while True: c,a=s.accept() threading.Thread(target=worker,args=(c,a),daemon=True).start() server() ===================================================================================================================================== EXP3 (Managing API keys using Multi-threading):- import threading import time import uuid from datetime import datetime, timedelta from flask import Flask, jsonify, request class KeyManager: def __init__(self): self.keys = {} self.lock = threading.Lock() self.KEY_TTL_SECONDS = 300 self.BLOCK_TTL_SECONDS = 60 self.CLEANUP_INTERVAL_SECONDS = 5 self.AVAILABLE = "AVAILABLE" self.BLOCKED = "BLOCKED" threading.Thread(target=self._cleanup_loop, daemon=True).start() def _cleanup_loop(self): while True: try: self._run_cleanup() except Exception as e: print(f"Cleanup thread error: {e}") time.sleep(self.CLEANUP_INTERVAL_SECONDS) def _run_cleanup(self): now = datetime.now() keys_to_delete = [] keys_to_unblock = [] with self.lock: for key_id, data in self.keys.items(): # 1. Check for key expiry (5-minute TTL) if data["expiry_time"] < now: keys_to_delete.append(key_id) # 2. Check for block auto-release (60-second block TTL) if data["status"] == self.BLOCKED and data["blocked_until"] < now: keys_to_unblock.append(key_id) for key_id in keys_to_delete: del self.keys[key_id] for key_id in keys_to_unblock: self.keys[key_id]["status"] = self.AVAILABLE self.keys[key_id]["blocked_until"] = None def create_key(self): key_id = uuid.uuid4().hex with self.lock: self.keys[key_id] = { "id": key_id, "status": self.AVAILABLE, "expiry_time": datetime.now() + timedelta(seconds=self.KEY_TTL_SECONDS), "blocked_until": None } return key_id def get_available_key(self): with self.lock: for key_id, data in self.keys.items(): if data["status"] == self.AVAILABLE: data["status"] = self.BLOCKED data["blocked_until"] = datetime.now() + timedelta(seconds=self.BLOCK_TTL_SECONDS) return key_id return None def unblock_key(self, key_id): with self.lock: if key_id in self.keys and self.keys[key_id]["status"] == self.BLOCKED: self.keys[key_id]["status"] = self.AVAILABLE self.keys[key_id]["blocked_until"] = None return True return False def keep_alive(self, key_id): with self.lock: if key_id in self.keys: # Keep-alive resets the 5-minute TTL self.keys[key_id]["expiry_time"] = datetime.now() + timedelta(seconds=self.KEY_TTL_SECONDS) return True return False def get_keys_status(self): with self.lock: # Prepare a serializable copy of the keys for JSON status = {} for k, v in self.keys.items(): status[k] = { "status": v["status"], "expiry_time": v["expiry_time"].isoformat() if v["expiry_time"] else None, "blocked_until": v["blocked_until"].isoformat() if v["blocked_until"] else None } return status app = Flask(__name__) manager = KeyManager() @app.route("/create", methods=["POST"]) def create_key_endpoint(): key_id = manager.create_key() return jsonify({"key_id": key_id, "message": "Key created successfully"}), 201 @app.route("/get_key", methods=["POST"]) def get_key_endpoint(): key_id = manager.get_available_key() if key_id: return jsonify({"key_id": key_id, "status": "BLOCKED"}), 200 return jsonify({"message": "No available keys at this time"}), 404 @app.route("/unblock/
", methods=["POST"]) def unblock_key_endpoint(key_id): if manager.unblock_key(key_id): return jsonify({"key_id": key_id, "status": "AVAILABLE", "message": "Key unblocked"}), 200 return jsonify({"message": "Key not found or not currently blocked"}), 404 @app.route("/keep_alive/
", methods=["POST"]) def keep_alive_endpoint(key_id): if manager.keep_alive(key_id): return jsonify({"key_id": key_id, "message": "TTL extended by 5 minutes"}), 200 return jsonify({"message": "Key not found"}), 404 @app.route("/status", methods=["GET"]) def status_endpoint(): return jsonify(manager.get_keys_status()), 200 if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ''' --- STEP-BY-STEP COMMAND GUIDE FOR DEMO --- 1️⃣ Start the server Run the Python script: PS> python your_script_name.py (Server will start at http://0.0.0.0:5000/) 2️⃣ Create a new API key PowerShell: PS> Invoke-RestMethod -Uri http://127.0.0.1:5000/create -Method POST (Returns JSON with your new key_id) 3️⃣ Get an available key (marks it as BLOCKED) PS> (Returns key_id and status BLOCKED, or 404 if none available) 4️⃣ Keep-alive a key to extend TTL Replace
with the key from step 2 or 3 PS> Invoke-RestMethod -Uri http://127.0.0.1:5000/keep_alive/
-Method POST (TTL extended by 5 minutes) 5️⃣ Unblock a key manually Replace
with your key PS> Invoke-RestMethod -Uri http://127.0.0.1:5000/unblock/
-Method POST (Key becomes AVAILABLE again) 6️⃣ Check current status of all keys PS> Invoke-RestMethod -Uri http://127.0.0.1:5000/status -Method GET (Shows all keys with their status, expiry_time, blocked_until) 7️⃣ Automatic behavior - Any key without keep-alive for 5 minutes → auto-deleted - Any blocked key not unblocked manually → auto-unblocked after 60 seconds ✅ Notes: - Always use POST for `/create`, `/get_key`, `/keep_alive`, `/unblock` - Use GET for `/status` - PowerShell’s Invoke-RestMethod handles JSON automatically - You can also test using Python `requests` if preferred ''' ===================================================================================================================================== EXP4 (Distributed Logging System for anomaly detection):- import threading import time import random from queue import Queue from flask import Flask, jsonify app = Flask(__name__) NUM_SERVERS = int(input("Enter number of servers to simulate: ")) LOGS_PER_SERVER = int(input("Enter number of logs each server should generate: ")) print("Distributed Logging System Simulation (Lamport Logical Clocks)") print(f"{NUM_SERVERS} servers will each generate {LOGS_PER_SERVER} logs with unsynchronized clocks.") print("Visit http://127.0.0.1:5000/logs after a few seconds to see globally ordered logs.") print("Logs are sorted by Lamport logical clocks, with server ID as tie-breaker.\n") class Server: def __init__(self, server_id, log_queue): self.id = server_id self.clock = 0 self.logs = [] self.queue = log_queue def generate_logs(self): for i in range(LOGS_PER_SERVER): time.sleep(random.uniform(0.1,0.5)) self.clock += 1 log_entry = { "server_id": self.id, "event": f"Event {i+1} from Server {self.id}", "lamport_clock": self.clock, "raw_time": time.time() } self.logs.append(log_entry) self.queue.put(log_entry) log_queue = Queue() servers = [Server(i, log_queue) for i in range(1, NUM_SERVERS+1)] def start_servers(): threads = [] for s in servers: t = threading.Thread(target=s.generate_logs) t.start() threads.append(t) for t in threads: t.join() @app.route("/logs", methods=["GET"]) def get_merged_logs(): merged_logs = [] while not log_queue.empty(): merged_logs.append(log_queue.get()) merged_logs.sort(key=lambda x: (x['lamport_clock'], x['server_id'])) return jsonify(merged_logs) if __name__ == "__main__": threading.Thread(target=start_servers).start() app.run(port=5000) ===================================================================================================================================== EXP5 (Implement a distributed Arithmetic Service where a client invokes remote methods):- [client] import xmlrpc.client server_url = "http://127.0.0.1:8000" proxy = xmlrpc.client.ServerProxy(server_url, allow_none=True) a=float(input("Enter the First Number: ")) b=float(input("Enter the Second Number: ")) print(f"Calling add({a},{b}) remotely: {proxy.add(a,b)}") print(f"Calling subtract({a},{b}) remotely: {proxy.subtract(a,b)}") print(f"Calling multiply({a},{b}) remotely: {proxy.multiply(a,b)}") [server] from xmlrpc.server import SimpleXMLRPCServer from xmlrpc.server import SimpleXMLRPCRequestHandler class ArithmeticService: def add(self, a, b): return a + b def subtract(self, a, b): return a - b def multiply(self, a, b): return a * b if __name__ == "__main__": print("Starting Arithmetic RPC Server on port 8000...") server = SimpleXMLRPCServer(("0.0.0.0", 8000), allow_none=True) service = ArithmeticService() server.register_instance(service) print("Server ready. Methods: add(a,b), subtract(a,b), multiply(a,b)") server.serve_forever() ===================================================================================================================================== EXP6 (Simulate Vector Clocks for logical clock synchronization.):- import threading import time import random NUM_PROCESSES = int(input("Enter the number of prcess: ")) EVENTS_PER_PROCESS = int(input("Ennter the number of process events: ")) class Process: def __init__(self, pid, all_processes): self.pid = pid self.clock = [0]*NUM_PROCESSES self.all_processes = all_processes self.events = [] def local_event(self): self.clock[self.pid] += 1 event = f"Process {self.pid} local event {len(self.events)+1}" self.events.append((event, self.clock.copy())) print(f"[Local] {event} | Vector Clock: {self.clock}") def send_message(self, target_pid): self.clock[self.pid] += 1 msg = self.clock.copy() target = self.all_processes[target_pid] target.receive_message(msg, self.pid) def receive_message(self, msg_clock, sender_pid): self.clock = [max(self.clock[i], msg_clock[i]) for i in range(NUM_PROCESSES)] self.clock[self.pid] += 1 event = f"Process {self.pid} received message from {sender_pid}" self.events.append((event, self.clock.copy())) print(f"[Receive] {event} | Vector Clock: {self.clock}") def run(self): for _ in range(EVENTS_PER_PROCESS): time.sleep(random.uniform(0.1,0.5)) if random.random() < 0.5: self.local_event() else: target_pid = random.choice([i for i in range(NUM_PROCESSES) if i != self.pid]) self.send_message(target_pid) processes = [] for i in range(NUM_PROCESSES): p = Process(i, None) processes.append(p) for p in processes: p.all_processes = processes threads = [] for p in processes: t = threading.Thread(target=p.run) t.start() threads.append(t) for t in threads: t.join() print("\n--- Final Events & Vector Clocks ---") for p in processes: print(f"\nProcess {p.pid} events:") for e, vc in p.events: print(f"{e} | {vc}") ===================================================================================================================================== EXP7 (Design a system of distributed nodes and simulate leader election using the Bully Algorithm):- import threading import time import random class Node: def __init__(self, node_id, priority, nodes): self.node_id = node_id self.priority = priority self.nodes = nodes self.alive = True self.leader = None def fail(self): self.alive = False print(f"[FAIL] Node {self.node_id} failed.") def recover(self): self.alive = True print(f"[RECOVER] Node {self.node_id} recovered.") self.start_election() def start_election(self): print(f"[ELECTION] Node {self.node_id} initiating election.") higher_nodes = [n for n in self.nodes if n.priority > self.priority and n.alive] if not higher_nodes: self.leader = self.node_id print(f"[LEADER] Node {self.node_id} becomes the new leader.") for n in self.nodes: if n.alive: n.leader = self.leader else: for n in higher_nodes: print(f"[ELECTION] Node {self.node_id} sends election message to Node {n.node_id}") n.start_election() def simulate_bully(nodes): # Randomly fail current leader if any current_leader = max(nodes, key=lambda n: n.priority) print(f"[INIT] Node {current_leader.node_id} is initially leader.") time.sleep(1) # Fail leader current_leader.fail() time.sleep(1) # Trigger election from random alive node alive_nodes = [n for n in nodes if n.alive] starter = random.choice(alive_nodes) starter.start_election() print("\n[RESULT] Leader election complete.") for n in nodes: print(f"Node {n.node_id} sees leader as Node {n.leader}") if __name__ == "__main__": # Assign nodes with priorities nodes = [ Node(1, priority=1, nodes=None), Node(2, priority=2, nodes=None), Node(3, priority=3, nodes=None), Node(4, priority=4, nodes=None), Node(5, priority=5, nodes=None) ] for n in nodes: n.nodes = nodes simulate_bully(nodes) ===================================================================================================================================== EXP8 (Simulate the Ring Election Algorithm with circular process arrangement):- import threading import time import random class Process: def __init__(self, pid, priority): self.pid = pid self.priority = priority self.alive = True self.leader = None self.next_process = None def fail(self): self.alive = False print(f"[FAIL] Process {self.pid} failed.") def recover(self): self.alive = True print(f"[RECOVER] Process {self.pid} recovered.") def start_election(self): print(f"[ELECTION] Process {self.pid} starts election.") election_msg = [self.priority] current = self.next_process while current.pid != self.pid: if current.alive: print(f"[ELECTION] Passing message {election_msg} to Process {current.pid}") election_msg.append(current.priority) current = current.next_process new_leader_priority = max(election_msg) current = self while True: if current.alive: current.leader = new_leader_priority current = current.next_process if current.pid == self.pid: break print(f"[LEADER] New leader elected with priority {new_leader_priority}") def simulate_ring(nodes): for i in range(len(nodes)): nodes[i].next_process = nodes[(i+1)%len(nodes)] # Randomly fail leader leader = max(nodes, key=lambda n: n.priority) print(f"[INIT] Process {leader.pid} with priority {leader.priority} is initially leader.") leader.fail() time.sleep(1) # Start election from random alive process starter = random.choice([n for n in nodes if n.alive]) starter.start_election() print("\n[RESULT] Election complete. Process view:") for n in nodes: print(f"Process {n.pid} sees leader priority as {n.leader}") if __name__ == "__main__": nodes = [ Process(1, 1), Process(2, 2), Process(3, 3), Process(4, 4), Process(5, 5) ] simulate_ring(nodes) ===================================================================================================================================== EXP9 (Build a simple distributed key-value store that shows eventual consistency across replicas.):- import threading import time class Replica: def __init__(self,name): self.name=name self.store={} def write(self,key,value): self.store[key]=value def read(self,key): return self.store.get(key,None) def propagate(src,replicas,key,value,delay=2): time.sleep(delay) for r in replicas: if r!=src: r.write(key,value) r1=Replica("R1") r2=Replica("R2") r3=Replica("R3") replicas=[r1,r2,r3] # write to one replica first r1.write("x",10) threading.Thread(target=propagate,args=(r1,replicas,"x",10)).start() print("Immediate read:") for r in replicas: print(r.name,r.read("x")) time.sleep(3) print("After propagation:") for r in replicas: print(r.name,r.read("x")) # update another replica r2.write("x",20) threading.Thread(target=propagate,args=(r2,replicas,"x",20)).start() time.sleep(3) print("Final state:") for r in replicas: print(r.name,r.read("x")) ===================================================================================================================================== EXP10 (Create a multithreaded server that handles multiple client requests):- from flask import Flask, request, jsonify import threading import time app = Flask(__name__) def handle(data): time.sleep(0.5) return data + " processed" @app.route("/process", methods=["POST"]) def process_request(): thread_name = threading.current_thread().name print(f"[THREAD] Handling request in thread: {thread_name}") data = request.json.get("text","") result = handle(data) return jsonify({"result": result}) if __name__ == "__main__": app.run(threaded=True, port=5000) ===================================================================================================================================== EXP11 (Simulate a load balancer that distributes requests to backend servers.):- import threading import time from flask import Flask, request, jsonify app = Flask(__name__) BACKENDS = ["Server1","Server2","Server3"] counter = 0 lock = threading.Lock() def process_backend(server_name, data): time.sleep(0.5) # a small sleep, to SHOW kuch process runnign return f"{server_name} processed {data}" @app.route("/request", methods=["POST"]) def handle_request(): global counter data = request.json.get("text","") with lock: backend = BACKENDS[counter % len(BACKENDS)] counter += 1 result = process_backend(backend, data) print(f"[LOAD BALANCER] Routed '{data}' to {backend}") return jsonify({"result": result, "backend": backend}) if __name__ == "__main__": app.run(threaded=True, port=5000) ===================================================================================================================================== [CHRISTIAN ALGO] [server-ntp] # server.py import socket, time def timeServer(): s=socket.socket() s.bind(("0.0.0.0", 8000)) s.listen(1) while True: c,a=s.accept() now=time.time() c.send(str(now).encode()) c.close() timeServer() [node] #node import socket, time def crisitianClient(): t0=time.time() s=socket.socket() s.connect(("127.0.0.1", 8000)) data=s.recv(128).decode() serverTime=float(data) t1=time.time() rttBy2=(t1-t0)/2 presentTime=serverTime+rttBy2 print(f"RREQUEST SENT TIME {t0}") print(f"RECEIVED TIME IS {presentTime}") print(f"OFFSET OF {presentTime-t0}") crisitianClient() ===================================================================================================================================== [pyro5] [server] # Before running: python -m Pyro5.nameserver # Install dependency: pip install Pyro5 import Pyro5.api @Pyro5.api.expose class SumService: def compute(self, n): return (n * (n + 1)) // 2 def main(): daemon = Pyro5.api.Daemon() # make a Pyro daemon uri = daemon.register(SumService()) # register the service instance try: ns = Pyro5.api.locate_ns() # locate the name server ns.register("example.sum", uri) # register with name print("Registered example.sum with the name server.") except Exception as e: print("Warning: could not register with nameserver:", e) print("Pyro5 Server running...") daemon.requestLoop() if __name__ == "__main__": main() [client] import Pyro5.api import time sum_service = Pyro5.api.Proxy("PYRONAME:example.sum") n = 20 num_requests = 5 start = time.time() for i in range(num_requests): result = sum_service.compute(n) end = time.time() print(f"Sum of first {n} natural numbers = {result}") print(f"Time for {num_requests} requests: {end - start:.6f} seconds") --in case this is needed: sum.proto-- syntax = "proto3"; service SumService { rpc ComputeSum (SumRequest) returns (SumResponse); } message SumRequest { int32 number = 1; } message SumResponse { int64 result = 1; } ===================================================================================================================================== [BERKLEY ALGO] HARDCODED LOGIC import random # fake clocks clocks=[100.2,101.7,99.9,100.5] def berkeley_sync(clocks): # coordinator collects times diffs=[] master=clocks[0] for t in clocks: diffs.append(t-master) avg=sum(diffs)/len(diffs) # compute offsets new_clocks=[] for t in clocks: new_clocks.append(t-avg) return new_clocks print("before:",clocks) print("after:",berkeley_sync(clocks)) ===================================================================================================================================== [LAMPORT-ismein NAME CHANGE KARNA HAI] [server] import socket def lamport_server(host='localhost', port=65432): server_clock = 0 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((host, port)) s.listen() print("Starting Lamport Clock Server…") print(f"Server is listening on {host}:{port}") while True: conn, addr = s.accept() with conn: print(f"Connected by {addr}") data = conn.recv(1024) if not data: break client_time = int(data.decode()) print(f"Received client time: {client_time}") server_clock = max(server_clock, client_time) + 1 print(f"Updated server clock: {server_clock}") if __name__ == "__main__": lamport_server() [client] import socket import sys def lamport_client(client_name='USER1', server_ip='10.10.45.66', server_port=65432): client_clock = 0 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((server_ip, server_port)) client_clock += 1 print(f"{client_name} clock on sending: {client_clock}") message=f"Hello from {client_name}, {client_clock}" s.sendall(message.encode()) if __name__ == "__main__": if len(sys.argv) > 1: client_name = "USER1 " + sys.argv[1] else: client_name = 'USER1' lamport_client(client_name) ===================================================================================================================================== [CORDINTOR BASED MUTUAL EXCLUSION] [cordinator] import socket,threading lock=False def coordinator(): global lock s=socket.socket() s.bind(("127.0.0.1",9000)) s.listen(5) print("COORDINATOR READY") while True: c,a=s.accept() msg=c.recv(64).decode() if msg=="REQ": if not lock: lock=True c.send(b"OK") else: c.send(b"WAIT") elif msg=="REL": lock=False c.send(b"ACK") c.close() coordinator() [node] import socket,time,random def request_cs(): s=socket.socket() s.connect(("127.0.0.1",9000)) s.send(b"REQ") reply=s.recv(64).decode() s.close() return reply def release_cs(): s=socket.socket() s.connect(("127.0.0.1",9000)) s.send(b"REL") ack=s.recv(64).decode() s.close() return ack def node(id): while True: print(f"node{id}: requesting CS") while True: r=request_cs() if r=="OK": break time.sleep(1) print(f"node{id}: in CS") time.sleep(random.randint(1,3)) release_cs() print(f"node{id}: left CS") time.sleep(random.randint(1,4)) node(1) ===================================================================================================================================== [matrix multiplication mpi wala] - before doing this, check if pip is installed (which pip) - then, run this command:- sudo apt install -y openmpi-bin libopenmpi-dev - and then:- pip install mpi4py - also, to run this, the format is:- mpirun -np
python
.py from mpi4py import MPI import numpy as np comm=MPI.COMM_WORLD rank=comm.Get_rank() size=comm.Get_size() m=4 n=4 p=4 print("RANDOMLY THE MATRICES ARE DEVELOPED!\n") comm.Barrier() start_time=MPI.Wtime() if rank==0: A=np.random.randint(0,10,size=(m,n)) B=np.random.randint(0,10,size=(n,p)) print("Matrix A:\n",A) print("Matrix B:\n",B) else: A=None B=None B=comm.bcast(B,root=0) rows_per_proc=m//size extra=m%size if rank
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)