Skip to content

Instantly share code, notes, and snippets.

@emilyhorsman
Created June 11, 2015 16:58
Show Gist options
  • Save emilyhorsman/05338ba48da167eee766 to your computer and use it in GitHub Desktop.
Save emilyhorsman/05338ba48da167eee766 to your computer and use it in GitHub Desktop.
from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer import HTTPServer
from multiprocessing import freeze_support, Process, Queue, Pool
import sys, time, json, signal
# mock
class RFID:
def __init__(self):
time.sleep(0.04)
def disconnect(self):
time.sleep(0.04)
def get_uid(self):
time.sleep(0.04)
t = str(time.time()).split('.')[0][-4:]
return ''.join(map(lambda x: format(ord(x), 'X'), t))
class RequestHandler(SimpleHTTPRequestHandler):
def do_POST(self):
print "POST request to: {}".format(self.path)
res = { 'tag': self.server.queue.get() }
self.send_response(200)
self.send_header('Content-Type', 'application/json')
self.end_headers()
self.wfile.write(json.dumps(res))
def server(q):
signal.signal(signal.SIGINT, signal.SIG_IGN)
address = ('0.0.0.0', 8000)
server = HTTPServer(address, RequestHandler)
server.queue = q
print "Server started at {}".format(address)
while True:
server.handle_request()
def monitor_rfid(q):
signal.signal(signal.SIGINT, signal.SIG_IGN)
r = RFID()
last_tag = None
while True:
tag = r.get_uid()
if tag == last_tag:
continue
last_tag = tag
q.put(tag)
def init_worker():
print "test"
signal.signal(signal.SIGINT, signal.SIG_IGN)
if __name__ == '__main__':
freeze_support()
q = Queue()
pool = []
pool.append(Process(target=monitor_rfid, args=(q,)))
pool.append(Process(target=server, args=(q,)))
try:
for p in pool:
p.start()
for p in pool:
p.join()
except:
for p in pool:
p.terminate()
p.join()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment