2
Linux (우분투 14.04 및 페도라 20)에서 OSX (10.8)보다 20 초 더 걸리는 스레드 된 smtp 서버가 있습니다.파이썬 2.7에서 threaded smtpd와 리눅스와 os x의 동작 차이가 매우 깁니다.
from email.parser import Parser
from smtpd import SMTPServer as StdLibSmtpServer
from smtplib import SMTP
from threading import Thread
import asyncore
import re
import select
import logging
import os.path
import datetime
import json
import random
from socket import gethostname
class SmtpServer(StdLibSmtpServer, object):
def __init__(self, listen='localhost', port=10025,
forward_address='localhost', forward_port=10026):
super(SmtpServer, self).__init__((listen, port), None)
self.forward_address = forward_address
self.forward_port = forward_port
self._thread = None
self._smtp = SMTP()
self._should_re_raise_exceptions = False
def start(self):
if self._thread:
raise Exception("Already running")
logging.debug("Starting up")
self._thread = Thread(target=self._thread_func)
self._thread.daemon = True
self._thread.start()
logging.info("Started")
def stop(self):
if not self._thread:
raise Exception("Not running")
logging.debug("Stopping")
self.close()
self._thread.join()
self._thread = None
logging.info("Stopped")
def _thread_func(self):
try:
asyncore.loop()
except select.error:
pass # socket was closed, we are shutting down
self._thread.join() 행에서 발생하며 그 이유를 파악할 수 있습니다.
문제를 해결하는 방법에 대한 조언이 있으십니까? 내가 수행하여 파일을 실행 :
from test import SmtpServer
serv = SmtpServer()
serv.start()
serv.stop()
serv.stop()를 리눅스에서 방법 느린 부분입니다.
타임 아웃 값을'self._thread.join()'으로 설정해보십시오 - 즉'self._thread.join (timeout = 0.5);' –