Архив автора: admin

Запуск процессов в tulip

В последнее время я работаю над запуском процессов в tulip: PEP 3156 и реализация на гуглокоде

Состояние дел на сегодня

Базовые конструкции выглядят так:

Транспорт:

class BaseTransport:
"""Base ABC for transports."""

def get_extra_info(self, name, default=None):
"""Get optional transport information."""

def close(self):
"""Closes the transport.

Buffered data will be flushed asynchronously. No more data
will be received. After all buffered data is flushed, the
protocol's connection_lost() method will (eventually) called
with None as its argument.
"""

class SubprocessTransport(BaseTransport):

def get_pid(self):
"""Get subprocess id."""

def get_returncode(self):
"""Get subprocess returncode.

See also
http://docs.python.org/3/library/subprocess#subprocess.Popen.returncode
"""

def get_pipe_transport(self, fd):
"""Get transport for pipe with number fd."""

def send_signal(self, signal):
"""Send signal to subprocess.

See also:
http://docs.python.org/3/library/subprocess#subprocess.Popen.send_signal
"""

def terminate(self):
"""Stop the subprocess.

Alias for close() method.

On Posix OSs the method sends SIGTERM to the subprocess.
On Windows the Win32 API function TerminateProcess()
is called to stop the subprocess.

See also:
http://docs.python.org/3/library/subprocess#subprocess.Popen.terminate
"""

def kill(self):
"""Kill the subprocess.

On Posix OSs the function sends SIGKILL to the subprocess.
On Windows kill() is an alias for terminate().

See also:
http://docs.python.org/3/library/subprocess#subprocess.Popen.kill
"""

Протокол:

class BaseProtocol:
"""ABC for base protocol class.

Usually user implements protocols that derived from BaseProtocol
like Protocol or ProcessProtocol.

The only case when BaseProtocol should be implemented directly is
write-only transport like write pipe
"""

def connection_made(self, transport):
"""Called when a connection is made.

The argument is the transport representing the pipe connection.
To receive data, wait for data_received() calls.
When the connection is closed, connection_lost() is called.
"""

def connection_lost(self, exc):
"""Called when the connection is lost or closed.

The argument is an exception object or None (the latter
meaning a regular EOF is received or the connection was
aborted or closed).
"""

class SubprocessProtocol(BaseProtocol):
"""ABC representing a protocol for subprocess calls."""

def pipe_data_received(self, fd, data):
"""Called when subprocess write a data into stdout/stderr pipes.

fd is int file dascriptor.
data is bytes object.
"""

def pipe_connection_lost(self, fd, exc):
"""Called when a file descriptor associated with the child process is
closed.

fd is the int file descriptor that was closed.
"""

def process_exited(self):
"""Called when subprocess has exited.
"""

Нужные методы в event loop:

class AbstractEventLoop:
"""Abstract event loop."""

def subprocess_shell(self, protocol_factory, cmd, *, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
**kwargs):
"""Run cmd in shell"""

def subprocess_exec(self, protocol_factory, *args, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
**kwargs):
"""Subprocess *args"""

Т.е. интерфейс запуска процесса почти повторяет subprocess.Popen за исключением того, что subprocess.PIPE теперь вариант по умолчaнию. Заодно еще избавляемся от кошмара с правильным использованием shell=True (см. пост на эту тему). Поддерживаются только байтовые потоки, как и везде в tulip.

Оно уже в целом работает на Unix, код для Windows тоже готовится.

Делает всё что можно и нужно за исключением TTY. C TTY ван Россум предложил пока не связываться, да и subprocess его не поддерживает.

Проблема

Рабочие транспорты и протоколы — это, конечно, классно. Вполне подходящий низкоуровневый строительный блок.

Но простому программисту хочется иметь что-то более удобное и привычное.

Для tulip это должен быть код на основе yield from.

Проблема в том, что для процессов мы имеем не один поток ввода-вывода, а три однонаправленных: stdin, stdout и stderr. А еще процесс может сам решить закрыться, и это тоже нужно удобно обрабатывать.

Просьба

Я пытался придумать что-то такое, но результат пока мне не нравится.

Может, кто сумеет посоветовать дельную конструкцию? Или указать на готовую библиотеку, у которой можно поучиться?

Автор: Andrew Svetlov

Украшение за полчаса – браслет из молнии

Это оригинальное украшение сможет сделать даже подросток. Оно прекрасно подойдет для тех, кто ежедневно носит деним и одевается в стиле casual. Итак, браслет из молнии своими руками – тема сегодняшней статьи.

Браслет из молнии

Браслет из молнии

Читать

Автоматическое добавление анонсов статей в Twitter и Facebook

Приветствую! В этой статье я хочу рассказать, как автоматизировать процесс добавления анонсов статей в такие социальные сети, как Твиттер и Фейсбук через Twitterfeed.com. Как известно, анонс только что опубликованной статьи в социальных сетях ускоряет ее индексацию поисковыми роботами. Для молодых сайтов крайне важно добиться быстрой индексации. В первую очередь для того, чтобы никто не скопировал у Вас статью и не разместил у себя на сайте. Если на сайте, укравшем у Вас статью, она проиндексируется раньше, то он будет считаться первоисточником.

Можно вручную добавлять анонсы новых статей, нажимая на кнопки соцсетей. Надеюсь Вы добавили их себе на сайт. Если нет, то почитайте эту статью с подробной инструкцией. Или же воспользоваться бесплатным сервисом для автоматического кросспостинга Twitterfeed.com.

Первым делом необходимо зарегистрироваться. Перейдите на сайт Twitterfeed.com и вверху нажмите на ссылку sign up.

Сразу после регистрации Вам предложат настроить трансляцию RSS-ленты в соцсети.

Как транслировать RSS-ленту сайта в аккаунт Twitter, Facebook через Twitterfeed.comУкажите любое название, адрес RSS. Для настройки дополнительных опций кликните по Advanced Settings.

В раскрывшемся дополнительном меню Advanced Settings, обратите внимание на следующие пункты:

  1. Update Frequency — частота проверки RSS-ленты. По умолчанию стоит проверка каждые пол часа. Можете изменить на любой другой интервал, вплоть до 24 часов.
  2. Post Content — что будет попадать в анонс. По умолчанию стоит название поста и описание. Если у Вас стоит плагин All in One SEO, то Description будет браться из него.
  3. Post Link — вид сокращенной ссылки. На выбор предложено до десятка сервисов для сокращения ссылки.

Другие настройки не имеют существенного значения и их можно не трогать.

Переходим ко второму шагу. Выбор социальной сети:

Автоматическое добавление анонсов статей в Twitter и Facebook через Twitterfeed.com

Я покажу на примере Твиттера. Для Facebook все аналогично. Нужно авторизоваться с помощью twitter. Как только связь будет установлена, нажмите внизу на кнопку для продолжения. Теперь можно добавить трансляцию RSS-ленты в Фейсбук, или завершить. Нажмите внизу на кнопку All Done!, чтобы сохранить. В любой момент можно отредактировать настройки или удалить ленту.

Можно настроить кросспостинг одной и той же ленты в несколько аккаунтов соцсетей. Или подключить еще одну  RSS-ленту.

В одной из следующих статей я расскажу как настроить трансляцию анонсов в Твиттер в самом фиде. А с Твиттера в Фейсбук. Подпишитесь на обновления, чтобы не пропустить.



2013-08-10T10:54:17
Блог на WordPress

Сода для похудения — отзыв диетолога

Сода для похудения отзывыСода есть в доме у каждой хозяйки и на фоне сумбурной шумихи в интернете многих интересует вопрос: «Эффективна ли пищевая сода для похудения, отзывы о которой столь противоречивы?» Я, как кандидат медицинских наук, могу с уверенностью сказать, что похудение с помощью соды возможно за счет обезвоживания, но это никак не скажется на жировой прослойке и фигуре в целом.

Пытаясь сбросить лишний вес, люди придумывают самые разнообразные методы похудения. Сейчас мы подробно рассмотрим способы, которые основаны на использовании пищевой соды. Популярными среди них стали два способа: ванна для похудения с содой и напиток с содой. Читать
Украшения для волос хэндмэйд

Украшения для волос своими руками

Длинным волосам и уход должный, и внимание особенное. А внимание это, как правило, заключается в различных прическах и разного рода украшениях для волос. И каждый день хочется быть такой разной и неповторимой. Так и разориться недолго! Не разоритесь, если покупные украшения для волос будете чередовать с украшениями хэндмэйд. Как сделать украшение для волос своими руками – постараемся снова вас вдохновить!

Украшения для волос своими руками

Украшения для волос своими руками

Читать

Второе рождение

Второе рождение у моего супруга 20 августа 1993 года. У всех обычно один день рождения. Произошло второе рождение после взрыва, при котором мой супруг Игорь Олегович Снытко, которому на то время было 40 лет, остался без обеих ног.

Разминировал местность на территории Приднестровья. Отголоски страшной никому не нужной войны у нас в Молдове. Игорь был назначен начальником группы разминирования миротворческих сил Молдовы, в подчинении которого были старший лейтенант Александр Голошан и группа молодых солдат, которых старшие не пустили на разминирование, а делали это сами.

Мины надо было искать с помощью щупов. Местность лесистая с глубокими промоинами. В тот день всё шло по плану, каждый проверял свой участок. Август, трава уже высохла и мешала крепко стоять на одном месте. И вдруг Игорь услышал в небе карканье ворона, который кружился над ним. Поднял голову, и в этот момент ноги соскользнули-с места … страшное произошло – взрыв! Читать