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

Python:SMTP init方法在try:except块中使用时挂起,python,sockets,exception,smtplib,getaddrinfo,Python,Sockets,Exception,Smtplib,Getaddrinfo,我试图通过电子邮件发送一些回溯,我正在使用pythonSMTPlib 我的代码如下所示 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)

我试图通过电子邮件发送一些回溯,我正在使用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)
挂起并且不返回。稍微挖掘一下这个问题,我发现
\uuuu init\uuuu
for
SMTP
类调用
connect()
,然后调用套接字函数
createconnection
,它使用linux的
getaddrinfo()

呼叫路径:

mycode-->smtplib.SMTP---> __init__--->connect---->createconnection()--->getaddrinfo()
getaddrinfo()
调用永远不会返回。这是悬念点。有什么问题吗?此外,我没有从
SMTP
lib收到任何回溯或异常。这是因为我已经发现了一个异常吗

只有在调用
块中的
send\u mail\u thread()
函数时才会发生这种情况,但
块除外。从上面:

except Exception:
    send_email_thread(from_addr,to_addr, str(traceback.format_exc()))
我试着把它放在外面,它成功了!哪些信号表明捕获异常然后运行此操作可能导致了问题?有什么建议吗?我正在Linux上使用python 2.7

[编辑]

在下面的一些评论之后,我想添加以下更新。代码在从另一个主进程创建的进程内运行(使用
多处理
模块)。然后在此子进程的线程内调用
send\u email\u函数


我创建了一个更简单的程序来测试它,在这个程序中,所有的事情都在一个进程中完成。结果成功了。这意味着当某个子进程中出现异常时,
getaddrinfo()
的行为存在一些问题(死锁),或者,
多处理
模块处理POSIX调用的能力如何

是否尝试编写不使用线程的最低版本?这可能是由于线程造成的某种死锁。实际上没有什么比这更重要的了,这段代码在一个子进程中执行,该子进程是由一些init代码创建的。所以基本上我们在一个子进程的线程中运行它。我将尝试编写一个简单的版本。请注意,混合进程和线程可能会产生奇怪的行为(例如,使用
日志记录
可能会使程序死锁)。如果没有一个简单的例子,可能真的很难理解真正的问题在哪里。顺便说一句,他们试图捕获一个不太通用的异常类。您可能只关心
OSError
IOError
以及一般的异常,因此可能还有其他问题,但它被您
try
块所掩盖。尝试阅读它似乎是相关的。我不是在一个进程中混合线程和进程。我的评论是指实际代码在子进程中运行。但是,在这个子进程中启动一个线程,它只发送电子邮件而不会被阻止。我认为这不符合“混合进程和线程”的要求