python - 如何跟踪多线程软件?

标签 python multithreading debugging trace

我有一个多线程客户端-服务器软件,当连接 10 个客户端时调试起来有点困难。我有一些关于追踪的问题。

  1. 如何仅跟踪软件中的某个文件或类?
  2. 是否有可能拥有一个带有时间戳和函数名称的日志,没有任何其他信息并由线程分隔?
  3. 有图形跟踪生成器吗?

最佳答案

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

它使用 mongo 作为存储,但你可以编写任何后端。只需包装您需要的函数并遵循日志即可。

关于python - 如何跟踪多线程软件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16519851/

相关文章:

python - Python 支持多线程吗?它可以加快执行时间吗?

java - hibernate c3p0 ThreadPoolExecutor 连接池,我做对了吗?

python - 查找数组是否包含 2 旁边的 2

python - CUPTI 事件缓冲区已刷新,GpuTracer 已收集 577 个回调 api 事件和 577 个事件事件,我应该担心吗?

python - SSH - 带有 paramiko 问题的 Python

python - 在单元测试中使用 pyodbc

ios - DispatchQueue.main.async 和 DispatchQueue.main.sync 的区别

ios - URL 打开 Swift 应用程序 - 打开作品 - 调用的函数不起作用

java - 为什么方法断点会对性能产生如此负面的影响?

Python编码实践: Return None vs Return same datatype with empty value?