def bind_udp_socket(port, host="0.0.0.0"):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
return s
#!/usr/bin/env python3
import collections
import datetime
import logging
import os
import random
import signal
import sys
import sqlite3
import time
children = []
def run():
for i in range(7):
pid = os.fork()
if pid == 0: # child
break
children.append(pid)
else:
print(os.getpid(), children, file=sys.stderr)
conn = sqlite3.connect("db")
conn.execute("pragma synchronous = off")
for i in range(10 * 10000):
c = conn.cursor()
n = random.randint(0, 99999)
c.execute("select * from tt where i = ?", (n,))
i, _ = c.fetchone()
assert i == n
#for i in range(100000):
# c = conn.cursor()
# c.execute("insert into tt values(?, ?)", (i, str(i)))
#conn.commit()
if __name__ == "__main__":
run()
#!/usr/bin/env python3
import datetime
import logging
import os
import signal
import sys
from util import bind_udp_socket
children = []
def _term(signal_number=None, stack_frame=None):
for pid in children:
os.kill(pid, signal.SIGTERM)
os.wait()
sys.exit()
def loop(port=1514):
s = bind_udp_socket(port)
for i in range(15):
pid = os.fork()
if pid == 0: # child
break
children.append(pid)
else:
signal.signal(signal.SIGTERM, _term)
print(os.getpid(), children, file=sys.stderr)
msg = None
f = open("pid{}".format(os.getpid()), "w")
while True:
try:
msg, addr = s.recvfrom(8192)
f.write(msg.decode())
f.flush()
except Exception as e:
logging.exception("{} {} {}".format(datetime.datetime.now(), e, msg))
if __name__ == "__main__":
loop()
#!/usr/bin/env python3
import os
import sys
from util import bind_udp_socket
children = []
def loop(port=1516):
another = ("localhost", 1514)
s = bind_udp_socket(port)
for i in range(4):
pid = os.fork()
if pid == 0: # child
break
children.append(pid)
else:
print(os.getpid(), children, file=sys.stderr)
for i in range(100000):
s.sendto("{}\n".format(i).encode(), another)
if __name__ == "__main__":
loop()