Python奇怪的问题头脑风暴为什么一行有时不执行?

2024-06-16 14:01:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我15年编程生涯中遇到的最棘手的问题之一。你知道吗

安装程序是一个部署的Django应用程序。我们有一个允许用户邀请其他用户的功能。你知道吗

我循环浏览电子邮件地址列表。在循环的每一次迭代中,我都会做一些事情,以便在我们的系统中为用户提供服务,向他们发送欢迎电子邮件,并在第三方系统中记录此事件。你知道吗

循环体如下所示:

try:
    # ... some other code ...

    send_new_user_welcome_email(
        user,
        self.inviter,
        temp_password,
        welcome_message=welcome_message,
        is_reviewer=True
    )

    analytics_record_event(
        self.inviter,
        EVENT_INVITED_USER,
        invite_type='reviewer',
        invited_email=email
    )

    record_customer_io_invited_someone(
        self.inviter, 
        email
    )
except:
    logger.exception('While inviting user "%s"' % email)

我看到的问题是,analytics_record_event函数有时(大约每50次左右有人邀请一个或多个用户一次)似乎不会执行。它没有引起任何例外。只需跳过它,然后执行下一行。你知道吗

为了诊断问题,我在analytics_record_event函数中添加了日志记录,以便在每次调用文件时都记录到该文件:

def analytics_record_event(user,
                           event_name,
                           skip_mixpanel=False,
                           skip_preact=False,
                           **properties):
    username = user.username if hasattr(user, 'username') else user
    logger.info(
        u'analytics_record_event called for user %s and event "%s"' % (username, event_name)
    )

我想知道这是怎么回事。我已经花了很多时间研究这个问题,我的发现如下:

  • send_new_user_welcome_email被调用。我们的SMTP服务器日志确认电子邮件已发出。一个内部电子邮件日志也与此协作。你知道吗
  • record_customer_io_invited_someone被调用。外部系统中存在该用户的事件数据。你知道吗
  • 在我的日志文件中找不到u'analytics_record_event...log语句的条目。在其他时间,当这个函数正常执行时(大多数时间),日志条目就在那里。你知道吗
  • 上述except语句不存在异常日志。你知道吗
  • 在此时间范围内未找到未处理的异常。你知道吗
  • 当它失败时,作为整个邀请用户请求的一部分,对于每个被邀请的电子邮件,循环的每个迭代都会失败。循环的每次迭代都会失败。从来没有一个案例,邀请请求已被发送,它工作的一些邀请电子邮件和失败的一个请求内的一些。你知道吗
  • 这似乎与数据无关。电子邮件地址不包含任何奇怪的字符。你知道吗

看起来偶尔,对analytics_record_event的调用根本就没有发出。这使我非常悲痛。如果有人能就此提出调查途径,我将不胜感激。你知道吗


Tags: 用户selfevent电子邮件email系统记录时间
1条回答
网友
1楼 · 发布于 2024-06-16 14:01:52

结果发现,答案令人惊讶,而且极其平凡。你知道吗

我跟踪的代码是我正在处理的系统中标准用户创建过程的一部分。但是,有一个基于CSV文件的批量创建过程,它可以做类似的工作。analytics_record_event在该进程中没有被调用。你知道吗

未来的教训: -我以为我很聪明,在analytics_record_event上放了一个函数装饰器,覆盖了很多地方。这样的结果让我更加不解,于是绝望地求救:)。如果我在这个特定函数中调用analytics_record_event之前和之后添加了一个log语句,我会更早地意识到它根本没有被调用!工作时接吻。你知道吗

相关问题 更多 >