Python 如何跟踪多线程软件?
我有一个多线程的客户机-服务器软件,当连接10个客户机时,调试有点困难。关于追踪我有几个问题Python 如何跟踪多线程软件?,python,multithreading,debugging,trace,Python,Multithreading,Debugging,Trace,我有一个多线程的客户机-服务器软件,当连接10个客户机时,调试有点困难。关于追踪我有几个问题 如何仅跟踪软件中的某个文件或类 是否可能有一个带有时间戳和函数名的日志,而没有任何其他信息,并且由线程分隔 有图形跟踪生成器吗 它使用mongo作为存储,但您可以编写任何后端。只需包装您需要的函数并按照日志操作。让我们从定义开始。“追踪”是什么意思?调试?最简单的解决方案是知道函数何时被调用。您可以编写decorator,它将记录包装对象下的所有操作。 import logging import tim
它使用mongo作为存储,但您可以编写任何后端。只需包装您需要的函数并按照日志操作。让我们从定义开始。“追踪”是什么意思?调试?最简单的解决方案是知道函数何时被调用。您可以编写decorator,它将记录包装对象下的所有操作。
import logging
import time
import pymongo
import hashlib
import random
DEBUG_MODE = True
class logger(object):
def __new__(cls, *args, **kwargs):
if DEBUG_MODE:
return object.__new__(cls, *args, **kwargs)
else:
return args[0]
def __init__(self, foo):
self.foo = foo
logging.basicConfig(filename='exceptions.log', format='%(levelname)s %(asctime)s: %(message)s')
self.log = logging.getLogger(__name__)
def __call__(self, *args, **kwargs):
def _log():
try:
t = time.time()
func_hash = self._make_hash(t)
col = self._make_db_connection()
log_record = {'func_name':self.foo.__name__, 'start_time':t, 'func_hash':func_hash}
col.insert(log_record)
res = self.foo(*args, **kwargs)
log_record = {'func_name':self.foo.__name__, 'exc_time':round(time.time() - t,4), 'end_time':time.time(),'func_hash':func_hash}
col.insert(log_record)
return res
except Exception as e:
self.log.error(e)
return _log()
def _make_db_connection(self):
connection = pymongo.Connection()
db = connection.logger
collection = db.log
return collection
def _make_hash(self, t):
m = hashlib.md5()
m.update(str(t)+str(random.randrange(1,10)))
return m.hexdigest()