Skip to content

Instantly share code, notes, and snippets.

@tell
Last active October 2, 2015 23:48
Show Gist options
  • Save tell/2348333 to your computer and use it in GitHub Desktop.
Save tell/2348333 to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*-
import datetime
from threading import Thread
from Queue import Queue as queue
import SocketServer
import logging
import logging.handlers
class UTC(datetime.tzinfo):
'''copied from:
- Pythonのタイムゾーン変換(UTC->JST)ではまった - mitc - 日記
http://mitc.xrea.jp/diary/096'''
def utcoffset(self, dt):
return datetime.timedelta(0)
def tzname(self, dt):
return "UTC"
def dst(self, dt):
return datetime.timedelta(0)
class JST(datetime.tzinfo):
'''copied from:
- Pythonのタイムゾーン変換(UTC->JST)ではまった - mitc - 日記
http://mitc.xrea.jp/diary/096'''
def utcoffset(self,dt):
return datetime.timedelta(hours=9)
def dst(self,dt):
return datetime.timedelta(0)
def tzname(self,dt):
return "JST"
q = queue()
numOfThread = 1
logger = logging.getLogger('server')
rotHand = logging.handlers.RotatingFileHandler('log.txt',
maxBytes = pow(1024, 2),
backupCount = 9)
fmtr = logging.Formatter()
rotHand.setFormatter(fmtr)
logger.addHandler(rotHand)
logger.setLevel(logging.INFO)
def worker():
while True:
item = q.get()
# print item
logger.info(item)
q.task_done()
def workerWithDatetime():
while True:
item = q.get()
data = item[1]
now = item[0]
for line in data.splitlines():
print "[{0}] {1}".format(now, line)
logger.info("[{0}] {1}".format(now, line))
q.task_done()
class EchoHandler(SocketServer.StreamRequestHandler):
def handle(self):
caddr = self.client_address
msg = "Server; connect from: {0}".format(caddr)
now = datetime.datetime.now(JST()).isoformat()
q.put((now, msg))
while True:
msg = self.rfile.readline().strip()
now = datetime.datetime.now(JST()).isoformat()
if len(msg) == 0:
break
q.put((now, msg))
self.request.close()
msg = "Server; disconnect from: {0}".format(caddr)
now = datetime.datetime.now(JST()).isoformat()
q.put((now, msg))
if __name__ == '__main__':
for i in xrange(numOfThread):
t = Thread(target = workerWithDatetime)
t.daemon - True
t.start()
server = SocketServer.ThreadingTCPServer(('', 12345), EchoHandler)
msg = 'Server; listening: {0}'.format(server.socket.getsockname())
now = datetime.datetime.now(JST()).isoformat()
q.put((now, msg))
server.serve_forever()
@tell
Copy link
Author

tell commented Apr 10, 2012

maybe... logging is wordiness

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment