Python:在init:except块中使用时,SMTP init方法挂起

时间:2012-11-16 07:51:19

标签: python sockets exception smtplib getaddrinfo

我正在尝试通过电子邮件发送一些回溯,我正在使用python SMTP lib。

我的代码看起来像这样

def send_email_thread(from_addr, to_addr, message):
    server = smtplib.SMTP("smtp.googlemail.com", 587)
    server.ehlo()
    server.starttls()
    server.login(SENDMAIL_SMTP_USER, SENDMAIL_SMTP_PASSWD)
    server.sendmail(from_addr, to_addr, message)
    server.quit()

我试图获取追溯的实际代码

try:
    /*Something here that gives exception*/
except Exception:
    send_email_thread(from_addr,to_addr, str(traceback.format_exc()))

现在的问题是该行

server = smtplib.SMTP("smtp.googlemail.com", 587)

挂起并且不会返回。关于挖掘这个问题,我发现__init__ SMTP类调用connect() createconnection调用使用linux getaddrinfo()

的套接字函数mycode-->smtplib.SMTP---> __init__--->connect---->createconnection()--->getaddrinfo()

通话路径:

getaddrinfo()

SMTP来电永远不会回来。这是一个悬念。可能是什么问题呢?另外,我没有从send_mail_thread() lib收到任何追溯或异常。那是因为我已经抓住了一个例外吗?

仅当我在except块内调用except Exception: send_email_thread(from_addr,to_addr, str(traceback.format_exc())) 函数时才会发生这种情况。从上面:

multiprocessing

我尝试将它放在外面并且有效!哪些信号表明捕获异常然后运行此异常可能导致问题?有什么指针吗?我在Linux上使用python 2.7

[编辑]

在下面的一些评论之后,我想添加以下更新。代码在从另一个主进程创建的进程内运行(使用send_email_function模块)。然后在此子进程的线程内调用getaddrinfo()

我创建了一个更简单的程序来测试它,其中所有内容都在一个进程中完成。它成功了。这意味着当某个子进程中存在异常或multiprocessing模块处理POSIX调用的程度

时,{{1}}的行为方式存在一些问题(死锁)

0 个答案:

没有答案