lwzm
6/26/2015 - 1:52 AM

cli.py

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()