Подробности здесь.
Автор: Andrew Svetlov
Автор: Andrew Svetlov
Пример 1.
import smtplib
from email.mime.text import MIMEText
me = 'admin@mail.ru'
you = 'kot_smit@mail.ru'
smtp_server = 'smtp.mail.ru'
msg = MIMEText('Message e-mail')
msg['Subject'] = 'The contents of '
msg['From'] = me
msg['To'] = you
s = smtplib.SMTP(smtp_server)
s.sendmail(me, [you], msg.as_string())
s.quit()
Если нужно использовать свой smtp-сервер, то в строке
s = smtplib.SMTP(smtp_server)
переменную smtp_server указывать просто не надо. таким образом строка преобретает вид —
s = smtplib.SMTP()
затем нужно добавить строку
s.connect() Пример 2.
Отправка письма с вложением, используется smpt.yandex.ru
from smtplib import SMTP_SSL
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders
import os
filepath = "/path/to/file"
basename = os.path.basename(filepath)
address = "name@server"
# Compose attachment
part = MIMEBase('application', "octet-stream")
part.set_payload(open(filepath,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % basename)
# Compose message
msg = MIMEMultipart()
msg['From'] = address
msg['To'] = address
msg.attach(part)
# Send mail
smtp = SMTP_SSL()
smtp.connect('smtp.yandex.ru')
smtp.login(address, 'password')
smtp.sendmail(address, address, msg.as_string())
smtp.quit()
Автор: D1VER
Дата публикации: 2013-09-01T22:32:00.001-07:00
В многопоточной программе все потоки равны, но один всё же несколько выделяется. Это — главный поток.
Главным потоком называется тот, который создаётся при запуске процесса операционной системой. Потом программа может наплодить себе разных потоков на собственные нужды, но главный есть всегда.
Иногда нужно знать, код исполняется в главном потоке или нет. Например, работать с UNIX сигналами можно только из главного потока. Различные GUI библиотеки часто тоже хотят выполняться непременно в главном потоке и никаком другом.
Если мы пишем приложение, то всегда можно придумать тот или иной способ узнать главный поток. Например, при старте, когда других потоков ещё нет, узнать идентификатор потока через threading.get_ident() и запомнить его где-нибудь.
Когда создаём библиотеку такой способ не всегда подходит. А в самом питоне нет официального способа определить, главный поток это или нет.
Зато работают пара хаков.
Тест на главность потока:
isinstance(threading.current_thread(), threading._MainThread)
Идентификатор главного потока:
threading._shutdown.__self__.ident
Используются непубличные механизмы, но это всё же лучше чем ничего.
P.S. В Python 3.4 появится функция threading.main_thread(), которая возвращает объект главного потока. А до тех пор пользуемся хаками.
Автор: Andrew Svetlov
Celery — «distributed task queue». Это распределенная асинхронная очередь заданий, которая обладает широким функционалом.
Для использования нужно
>>> from celery import Celery
>>> celery = Celery()
>>> celery
В последней строке показано имя класса Celery, имя текущего основного модуля (__main__) и адреса памяти объекта (0x100469fd0).
Всякий раз при добавлении задания, задание добавляется в локальный реестр.
Варианты использования:
Автор: D1VER
Дата публикации: 2013-08-29T01:18:00.000-07:00
Автор: D1VER
Дата публикации: 2013-08-26T02:37:00.002-07:00
Не один год работая с Python и bash я, главным образом, использовал
При этом моя работа в интерактивном режиме Python сводилась к маленьким исследованиям того, как работает некий фрагмент кода. А в командной строке bash я не пользовался конструкциями, присущими языкам программирования, такими, как if или for, ограничиваясь запуском отдельных команд. Читать