Created
July 8, 2014 10:11
-
-
Save mengzhuo/884caf0281b5e1faefd1 to your computer and use it in GitHub Desktop.
Async Task Queue like base on greenlets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from gevent import monkey | |
monkey.patch_all() | |
from dns import resolver | |
from tuck import tuck | |
def get_mail_server(receiver=''): | |
user, domain = receiver.split('@') | |
dest_list = sorted([x.to_text().strip('.').split(' ') | |
for x in resolver.query(domain, 'MX')], | |
key=lambda x:x[0]) | |
return dest_list | |
@tuck | |
def test_send_mail(): | |
dest_list = get_mail_server(receiver) | |
times = 1 | |
for dest in dest_list: | |
sm = smtplib.SMTP(dest[1]) | |
sm.ehlo() | |
if sm.does_esmtp and 'starttls' in sm.esmtp_features: | |
sm.starttls() | |
try: | |
sm.sendmail(mail['From'], [receiver], mail.as_string()) | |
break | |
except Exception as err: | |
logger.warning(err, exc_info=True) | |
times += 1 | |
assert times <= len(dest_list), 'Tried all servers for %s' % receiver |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import functools | |
import gevent | |
from gevent import monkey, event | |
monkey.patch_all() | |
import logging | |
logger = logging.getLogger(__name__) | |
def tuck(func): | |
@functools.wraps(func) | |
def wrap(*args, **kwargs): | |
result = event.AsyncResult() | |
try: | |
gevent.spawn(func, *args, **kwargs).link(result) | |
except Exception as err: | |
logger.error(err, exc_info=True) | |
return | |
return wrap |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment