История изменений¶
Этот документ содержит заметки об изменениях для исправлений ошибок и новых функций в серии 4.4.x. Пожалуйста, посмотрите Что нового в Celery 4.4 (Cliffs) для обзора того, что нового в Celery 4.4.
4.4.7¶
- дата выхода:
2020-07-31 11.45 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Добавьте task_received, task_rejected и task_unknown в модуль сигналов.
[ES backend] добавьте 401 как безопасный для повторных попыток.
рассматривать внутренние ошибки как сбой.
Устраните предостережения redis fanout.
FIX: -A и –args должны вести себя одинаково. (#6223)
Автореферат задач на основе классов (#6233)
Сохранение порядка результатов групп при использовании бэкенда результатов Redis (#6218)
Замените future на celery.five Исправления #6250, и используйте raise_with_context вместо reraise
Исправить ошибку REMAP_SIGTERM=SIGQUIT
(Исправления#6258) MongoDB: исправление проблемы сериализации (#6259)
Использование упорядоченных наборов в Redis opt-in
Тестирование, CI, Docker & стиль и незначительные улучшения в документации.
4.4.6¶
- дата выхода:
2020-06-24 2.40 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Удаление методов autoscale force_scale (#6085).
Исправьте тест автомасштабирования
Передача адресата ping в запрос
chord: объединить опции init с опциями run
Верните метод KeyValueStoreBackend.set без состояния
Добавлена опция –range-prefix в celery multi (#6180)
Добавлена функция as_list в класс AsyncResult (#6179)
Исправьте ошибку CassandraBackend в потоках или пуле gevent (#6147)
Комбу 4.6.11
4.4.5¶
- дата выхода:
2020-06-08 12.15 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Добавьте недостающую зависимость от будущего (#6146).
ElasticSearch: Повторное индексирование, если документ был удален между индексированием
исправить сборку windows
Настройка интервала повторных попыток для задач chord_unlock
исправление многократных тестов в локальном
4.4.4¶
- дата выхода:
2020-06-03 11.00 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Исправьте autoretry_for с явным повтором (#6138).
Комбу 4.6.10
Используйте настройку максимального возраста соединения Django DB (исправление #4116).
Добавьте повторную попытку при восстанавливаемом исключении для бэкенда (#6122).
Исправьте случайное распределение джиттера для экспоненциального отката.
ElasticSearch: добавлена настройка для сохранения метаданных в формате json.
исправление #6136. celery 4.4.3 всегда пытался создать каталог /var/run/celery.
Добавьте сигнал task_internal_error (#6049).
4.4.3¶
- дата выхода:
2020-06-01 4.00 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Исправьте кодировку utf-8 в бэкенде s3 .
Комбу 4.6.9
Определения классов задач могут иметь атрибуты повторной попытки (#5869)
Обновление pycurl до последней версии с поддержкой wheel.
Добавьте uptime к команде stats inspect
Исправление проблемы #6019: невозможность использования параметров mysql SSL при получении
Очистка TraceBack для уменьшения утечек памяти для задачи исключений (#6024)
исключения: NotRegistered: исправить язык
Отказаться от отправки сообщения о прекращении работы, если транспорт не подключен
Добавьте задачу к __all__ в celery.__init__.py
Убедитесь, что один объект цепочки в цепочке не повышает MaximumRecursion
Исправьте автомасштабирование, когда множитель prefetch_multiplier равен 1
Разрешить start_worker функционировать без задачи ping
Обновление celeryd.conf
Исправьте правильную настройку сериализатора для режима always_eager.
Уберите удвоение увеличения prefetch_count, когда prefetch_multiplier
Исправление функции eager, не возвращающей результат после повторных попыток
возвращает результат повторной попытки, если не брошен и is_eager
Всегда запрашивать, пока работник потерян, независимо от флага повторной доставки
Разрешить относительные пути в бэкенде файловой системы (#6070)
[Исправлена проблема #6017]
Избегайте состояния гонки из-за дублирования задач.
Исключения должны быть классами старого стиля или производными от BaseException
Исправьте сборку для windows (#6104)
Добавьте кодировку к мета-задаче в base.py (#5894)
Обновите time.py для решения проблем с микросекундами (#5199)
Измените ошибку бэкенда _ensure_not_eager на предупреждение
Добавьте поддержку приоритета для задачи „celery.chord_unlock“ (#5766)
Изменение поведения при нетерпеливых повторных попытках
Избегайте состояния гонки в бэкенде elasticsearch
backends base get_many pass READY_STATES arg
Добавьте интеграционные тесты для Elasticsearch и исправьте _update
feat(backend): Добавляет очистку бэкенда ArangoDB
удалить проверку jython
исправление бэкенд файловой системы не может быть сериализован с помощью pick
4.4.0¶
- дата выхода:
2019-12-16 9.45 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Эта версия официально поддерживается на CPython 2.7, 3.5, 3.6, 3.7 и 3.8, а также на PyPy2 и PyPy3.
Комбу 4.6.7
Определения классов задач могут иметь атрибуты повторной попытки (#5869)
4.4.0rc5¶
- дата выхода:
2019-12-07 21.05 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Комбу 4.6.7
Бутстеп событий отключается, если нет событий (#5807)
SQS - Отклонить при неудаче (#5843)
Добавьте модель параллелизма с ThreadPoolExecutor (#5099)
Добавьте автоматическое истечение срока действия для бэкенда DynamoDB (#5805)
Храните результат расширения во всех бэкендах (#5661)
Исправление состояния гонки при публикации очень большого заголовка аккорда (#5850)
Улучшение документации и матрицы тестирования
4.4.0rc4¶
- дата выхода:
2019-11-11 00.45 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Комбу 4.6.6
Py-AMQP 2.5.2
Python 3.8
Многочисленные исправления ошибок
PyPy 7.2
4.4.0rc3¶
- дата выхода:
2019-08-14 23.00 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Комбу 4.6.4
Бильярд 3.6.1
Py-AMQP 2.5.1
Избегайте сериализации datetime (#5606)
Исправление: (group() | group()) не равняется одной группе (#5574)
Пересмотрите «Соединение брокера использует настройку сердцебиения из конфигурации приложения.
Проверки безопасности дескрипторов дополнительных файлов.
исправлен вызов для нулевых аргументов (#5631)
Добавлен общий путь для бэкенда кэша.
Исправить Ошибка вложенной группы(chain(group)) (#5638)
Используйте self.run() при переопределении __call__ (#5652)
Исправьте завершение работы asyncloop (#5671)
Исправьте задачу migrate для работы с v1 и v2 протоколом сообщений.
Обновление конфигурации task_routes во время выполнения теперь имеет эффект.
4.4.0rc2¶
- дата выхода:
2019-06-15 4:00 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Исправлено множество ошибок и регрессий.
Комбу 4.6.3
4.4.0rc1¶
- дата выхода:
2019-06-06 1:00 UTC+6:00
- релиз на:
Асиф Саиф Уддин
Падение Python 3.4
Комбу 4.6.1
Замените использование устаревших методов PyMongo (#5443)
Передача запроса задачи при вызове update_state (#5474)
Исправление ошибки в расчете оставшегося времени в случае смены времени DST (#5411)
Исправьте отсутствие названия задачи при запросе расширенного результата (#5439)
Исправьте проблему импорта коллекций на Python 2.7 (#5428)
обработка AttributeError в десериализаторе исключений бэкенда базы (#5435)
Сделайте AsynPool proc_alive_timeout настраиваемым (#5476)
Поддержка AMQP для расширенного результата (#5495)
Исправьте бэкенд результатов SQL Alchemy для работы с расширенным результатом (#5498)
Исправьте восстановление исключений с обязательным параметром (#5500)
Django: Перевыражайте исключение, если ImportError не вызван отсутствующим модулем задач (#5211)
Django: исправлена регрессия, приводящая соединения с БД в недопустимое состояние, когда CONN_MAX_AGE != 0 (#5515).
Исправлена OSError, приводящая к потере соединения с брокером (#4457).
Исправлена ошибка, из-за которой API inspect не мог получить подробную информацию о запросе
Исправьте аутентификацию бэкенда mogodb (#5527)
Измените тип столбца для Extended Task Meta args/kwargs на LargeBinary
Обработка http_auth в результатах бэкенда Elasticsearch (#5545)
Исправление игнорирования сериализатора задач при task_always_eager=True (#5549)
Исправьте task.replace для работы в .apply(), а также `.apply_async() (#5540)
Исправьте отправку сигнала worker_process_init для одиночного рабочего (#5562)
Исправьте выгрузку сообщений об исключениях (#5565)
Добавьте функцию параметра задержки в beat_schedule (#5558)
Многочисленные обновления документации
4.3.0¶
- дата выхода:
2019-03-31 7:00 UTC+3:00
- релиз на:
Омер Кац
Добавлена поддержка трансляции с использованием шаблона регулярного выражения или шаблона glob в несколько Pidbox’ов.
Это позволяет вам проверять или пинговать несколько рабочих одновременно.
При участии Дмитрия Малиновского и Джейсона Хелда.
Добавлена поддержка пакетов пространства имен PEP 420.
Это позволяет загружать задачи из пакетов пространства имен.
При участии Колина Уотсона.
Добавлено
acks_on_failure_or_timeout
в качестве настройки вместо опции только для задач.Эта информация отсутствовала в первоначальном PR, но теперь добавлена для полноты.
При участии Омера Каца.
Добавлен сигнал
task_received
.При участии Омера Каца.
Исправлен сбой нашего CLI, который происходил у всех, кто использует Python < 3.6.
Сбой произошел в acd6025 при использовании исключения
ModuleNotFoundError
, которое было введено в Python 3.6.При участии Омера Каца.
Исправлена ошибка, возникавшая при использовании бэкенда результатов Redis, когда для параметра
result_expires
установлено значение None.При участии Тони Ружа и Омера Каца.
Добавлена поддержка DNS seedlist connection format для бэкенда результатов MongoDB.
Для этого требуется пакет dnspython, который будет установлен по умолчанию при установке зависимостей для бэкенда результатов MongoDB.
Внесено Георгием Псаракисом.
Увеличьте минимальную версию eventlet до 0.24.1.
Внесено Георгием Псаракисом.
Замените пакет msgpack-python на msgpack.
Мы больше не используем устаревший пакет. Более подробную информацию о том, как обновить пакет, смотрите в important notes для этого выпуска.
При участии Даниэля Халера.
Позволяет планировать обработчики ошибок, которые не являются зарегистрированными задачами в текущем рабочем.
Такие обработчики ошибок теперь возможны:
from celery import Signature Signature( 'bar', args=['foo'], link_error=Signature('msg.err', queue='msg') ).apply_async()
Дополнительные исправления и улучшения в поддержке SSL в брокере Redis и бэкенде результатов.
При участии Джереми Коэна
Очистка кода, покрытие тестов и улучшение CI:
Омер Кац
Флориан Шарден
Документация Исправления по:
Омер Кац
Самуэль Хуанг
Амир Хоссейн Саид Подробнее.
Дмитрий Литвинов.
4.3.0 RC2¶
- дата выхода:
2019-03-03 9:30 UTC+2:00
- релиз на:
Омер Кац
Бэкенд файловой системы: Добавлены содержательные сообщения об ошибках для бэкенда файловой системы.
При участии Ларса Ринна.
Новый бэкенд результатов: Добавлен бэкенд ArangoDB.
При участии Дилипа Вамси Мотури.
Django: Подготавливайте текущий рабочий каталог вместо добавления, чтобы каталог проекта имел приоритет над системными модулями, как и ожидалось.
При участии Антонина Дельпеуха.
Увеличьте минимальную версию py-redis до 3.2.0.
Из-за многочисленных ошибок в предыдущих версиях py-redis, которые вызывали проблемы с Celery, мы были вынуждены увеличить минимально необходимую версию до 3.2.0.
При участии Омера Каца.
Зависимости: Увеличьте минимально необходимую версию Kombu до 4.4
При участии Омера Каца.
4.3.0 RC1¶
- дата выхода:
2019-02-20 5:00 PM IST
- релиз на:
Омер Кац
Канва:
celery.chain.apply()
больше не игнорирует аргументы ключевых слов при применении цепочки.При участии Корийна ван Голена.
Набор результатов: Не пытайтесь кэшировать результаты в
celery.result.ResultSet
.Во время соединения кэш результатов заполнялся с помощью
celery.result.ResultSet.get()
, если один из результатов содержал исключение, соединение неожиданно завершилось неудачей.Кэш результатов теперь удален.
При участии Дерека Харланда
Приложение:
celery.Celery.autodiscover_tasks()
теперь пытается импортировать сам пакет, когда аргумент ключевого слова related_name равен None.При участии Алекса Иоаннидиса.
Поддержка Windows: В Windows 10 неактуальные PID-файлы мешали запуску celery beat. Теперь мы удаляем их при появлении сообщения
SystemExit
.Внесено <<<0 >>>.
Задача: Добавлена новая настройка
task_acks_on_failure_or_timeout
.Квитирование сообщений SQS при сбое или тайм-ауте делает невозможным использование очередей «мертвых букв».
Мы ввели новую опцию acks_on_failure_or_timeout, чтобы гарантировать, что мы можем полностью отступить на собственный жизненный цикл сообщений SQS, используя повторные доставки для повторных попыток (в случае медленной обработки или отказа) и переходы в очередь мертвых букв после определенного количества раз.
При участии Марио Костелака.
RabbitMQ Broker: Настройте заголовки HA для работы на RabbitMQ 3.x.
Это изменение также означает, что мы прекращаем официальную поддержку RabbitMQ 2.x.
При участии Асифа Саифа Уддина.
Командная строка: Улучшена обработка ошибок celery update.
Внесено Федерико Бондом.
Канвас: Поддержка аккордов с
task_always_eager
, установленных на True.При участии Акселя Хаустанта.
Бэкенд результатов: Опционально храните свойства задачи в бэкенде результатов.
Установка параметра конфигурации
result_extended
в значение True позволяет хранить дополнительные свойства задачи в бэкенде результатов.При участии Джона Арнольда.
Бэкенд результатов Couchbase: Разрешите бэкенду результатов Couchbase автоматически определять формат сериализации.
При участии Дугласа Роде.
Новый бэкенд результатов: Добавлен бэкенд результатов Azure Block Blob Storage.
Бэкэнд реализован на базе библиотеки azure-storage, которая использует Azure Blob Storage для масштабируемого недорогого PaaS бэкэнда.
Бэкэнд был протестирован на нагрузку с помощью простого приложения nginx/gunicorn/sanic, размещенного на виртуальной машине DS4 (4 vCore, 16 ГБ RAM), и смог выдержать 600+ одновременных пользователей при ~170 RPS.
Коммит также содержит живой сквозной тест для проверки функциональности бэкенда. Тест активируется путем установки переменной окружения AZUREBLOCKBLOB_URL в значение azureblockblob://{ConnectionString}, где значение ConnectionString можно найти в панели Access Keys ресурсов учетной записи хранения в Azure Portal.
Внесено Клеменсом Вольфом.
Задача:
celery.app.task.update_state()
теперь принимает аргументы в виде ключевых слов.Это позволяет передавать дополнительные поля бэкенду результатов. По умолчанию эти поля не используются, но пользовательские бэкенды результатов могут использовать их для определения способа хранения результатов.
При участии Кристофера Дигнама.
Грациозная обработка потребителя
kombu.exceptions.DecodeError
.При использовании протокола v2 рабочий больше не падает, когда потребитель сталкивается с ошибкой при декодировании сообщения.
При участии Стивена Скляра.
Развертывание: Исправьте остановку службы init.d.
При участии Маркуса МакХейла
Django: Прекращена поддержка Django < 1.11.
При участии Асифа Саифа Уддина.
Django: Удалите старый загрузчик djcelery.
При участии Асифа Саифа Уддина.
Бэкенд результатов:
celery.worker.request.Request
теперь передаетcelery.app.task.Context
в функции store_result бэкенда.Поскольку в настоящее время класс передает self этим функциям, отзыв задания приводил к повреждению данных о результатах задания при использовании django-celery-results.
Внесено Киёхиро Ямагучи.
Рабочий: Повторите попытку, если соединение с пульсом разрывается.
Ранее мы продолжали пытаться писать в разорванное соединение. Это приводит к утечке памяти, поскольку диспетчер событий будет продолжать добавлять сообщение в исходящий буфер.
При участии Рафа Гинса.
Celery Beat: Работайте с микросекундами при составлении расписания.
Внесено К Дэвисом
Asynpool: Исправлен тупик при закрытии сокета.
При попытке закрыть сокет,
celery.concurrency.asynpool.AsynPool
удалял из концентратора только писателя очереди, но не удалял читателя. Это привело к тупику на дескрипторе файла, и в итоге рабочий перестал принимать новые задания.Теперь мы закрываем дескрипторы файлов читателя и писателя в одной итерации цикла, что предотвращает тупик.
При участии Джошуа Энгельмана.
Celery Beat: Правильно учитывайте часовой пояс при расчете метки времени.
Внесено <<<0 >>>.
Celery Beat:
celery.beat.Scheduler.schedules_equal()
теперь может обрабатывать любой из аргументов, являющийся значением None.Внесено <<<0 >>>.
Документация/Sphinx: Исправлена поддержка Sphinx для декорированных функций shared_task.
При участии Джона Банафато
Новый бэкенд результатов: Добавлен бэкенд результатов CosmosDB.
Это изменение добавляет новый бэкенд результатов. Бэкенд реализован на базе библиотеки pydocumentdb, которая использует Azure CosmosDB для масштабируемого, глобально реплицируемого, высокопроизводительного, с низкой задержкой и высокой пропускной способностью бэкенда PaaS.
Внесено Клеменсом Вольфом.
Приложения: Добавлены параметры конфигурации, позволяющие запускать несколько приложений на одном хосте RabbitMQ.
Недавно добавленные опции конфигурации
event_exchange
и << 1 >>> позволяют пользователям использовать отдельный обмен Pidbox и отдельный обмен событиями.Это позволяет разным приложениям Celery работать отдельно на одном vhost.
При участии Артема Васильева.
Бэкэнд результатов: Забывать метаданные родительского результата при забывании результата.
Внесено <<<0 >>>.
Задача Храните аргументы задачи внутри
celery.exceptions.MaxRetriesExceededError
.При участии Антони Рухье.
Бэкэнд результатов: Добавлена настройка
result_accept_content
.Эта функция позволяет настроить различное принимаемое содержимое для бэкенда результатов.
Для подписанных сообщений используется специальный сериализатор (auth), однако сериализатор результатов остается в формате json, поскольку мы не хотим иметь зашифрованное содержимое в бэкенде результатов.
Чтобы принимать неподписанное содержимое из бэкенда результатов, мы ввели этот новый параметр конфигурации для указания принимаемого содержимого из бэкенда.
При участии Бенджамина Перето.
Канвас: Исправлена обработка обратного вызова ошибки для задач на основе классов.
При участии Виктора Миреева.
Новый бэкенд результатов: Добавлен бэкенд результатов S3.
Внесено Флорианом Шарденом.
Задача: Добавлена поддержка Cythonized Celery задач.
При участии Андрея Скабелина.
Riak Result Backend: Предупреждение пользователей бэкенда Riak о возможной несовместимости с Python 3.7.
Внесено Георгием Псаракисом.
Python Runtime: Добавлена поддержка Python 3.7.
При участии Омера Каца и Асифа Саифа Уддина.
Сериализатор аутентификации: Переработан сериализатор аутентификации.
Сериализатор auth был полностью переработан. Ранее он был ужасно сломан.
Теперь мы зависим от криптографии вместо pyOpenSSL для этого сериализатора.
При участии Бенджамина Перето.
Командная строка: celery report теперь сообщает версию ядра вместе с другими деталями платформы.
При участии Омера Каца.
Канвас: Исправлены аккорды с цепочками, которые включают суб-аккорды в группу.
Теперь Celery правильно выполняет последнее задание в этих типах полотен:
c = chord( group([ chain( dummy.si(), chord( group([dummy.si(), dummy.si()]), dummy.si(), ), ), chain( dummy.si(), chord( group([dummy.si(), dummy.si()]), dummy.si(), ), ), ]), dummy.si() ) c.delay().get()
Внесено Максимильеном Куони.
Канвас: Сложные холсты с обратными вызовами ошибок больше не вызывают ошибку
AttributeError
.Очень сложные полотна, такие как this, больше не вызывают ошибку
AttributeError
, которая препятствует их построению.Мы пока не знаем, почему возникает эта ошибка.
При участии Мануэля Васкеса Акосты.
Командная строка: Добавлены корректные сообщения об ошибках в случаях, когда приложение не может быть загружено.
Ранее сельдерей разбивался в виде исключения.
Теперь мы выводим правильное сообщение об ошибке.
При участии Омера Каца.
Задача: Добавлена настройка
task_default_priority
.Теперь вы можете установить приоритет задачи по умолчанию с помощью параметра
task_default_priority
. Значение настройки будет использоваться, если для конкретной задачи не указан приоритет.Внесено <<<0 >>>.
Зависимости: Увеличьте минимально необходимую версию Kombu до 4.3 и Billiard до 3.6.
При участии Асифа Саифа Уддина.
Бэкэнд результатов: Устраните утечку памяти.
Мы снова ввели слабые ссылки на связанные методы для обещаний обратного вызова AsyncResult, после добавления полной поддержки weakref для Python 2 в vine. Более подробную информацию можно найти в celery/celery#4839.
При участии Георгия Псаракиса и <<<0 >>>.
Выполнение задач: Исправлена сериализация по кругу для нетерпеливых задач.
При выполнении сериализации в обе стороны для жаждущих задач, сериализатором задачи всегда будет JSON, если только в вызове
celery.app.task.Task.apply_async()
не присутствует аргумент serializer. Если аргумент serializer присутствует, но имеет значение „pickle““, будет вызвано исключение, так как объекты, сериализованные в pickle, не могут быть десериализованы без указания в `serialization.loads, какие типы содержимого должны быть приняты. Похоже, что для Producer’s serializer установлено значение None, что приводит к сериализации JSON по умолчанию.Теперь мы продолжаем использовать (по порядку) аргумент serializer в
celery.app.task.Task.apply_async()
, если он присутствует, или сериализатор Producer, если он не None. Если сериализатор Producer равен None, то в качестве сериализатора будет использоваться конфигурационная запись приложения Celery task_serializer.При участии Бретта Джексона
Redis Result Backend: Класс
celery.backends.redis.ResultConsumer
больше не предполагает, чтоcelery.backends.redis.ResultConsumer.start()
будет вызван доcelery.backends.redis.ResultConsumer.drain_events()
.Это исправляет состояние гонки при использовании пула рабочих Gevent.
При участии Ноама Куша
Задача: Добавлена настройка
task_inherit_parent_priority
.Установка опции конфигурации
task_inherit_parent_priority
в True заставит задачи Celery наследовать приоритет предыдущей связанной с ней задачи.Примеры:
c = celery.chain( add.s(2), # priority=None add.s(3).set(priority=5), # priority=5 add.s(4), # priority=5 add.s(5).set(priority=3), # priority=3 add.s(6), # priority=3 )
@app.task(bind=True) def child_task(self): pass @app.task(bind=True) def parent_task(self): child_task.delay() # child_task will also have priority=5 parent_task.apply_async(args=[], priority=5)
Внесено <<<0 >>>.
Канвас: Добавлена настройка
result_chord_join_timeout
.Ранее
celery.result.GroupResult.join()
имел фиксированный тайм-аут в 3 секунды.Настройка
result_chord_join_timeout
теперь позволяет изменить его.Внесено <<<0 >>>.
Очистка кода, покрытие тестов и улучшение CI:
Джон Дюфрейн
Асиф Саиф Уддин.
Омер Кац
Бретт Джексон
Бруно Алла
:github_user:`tothegump`
Боян Йованович
Флориан Шарден
:github_user:`walterqian`
Фабиан Беккер
Ларс Ринн
:github_user:`madprogrammer`
Киаран Кортни
Документация Исправления по:
Льюис М. Кабуи.
Дэш Уинтерсон
Шанавас М
Бретт Рэндалл
**Промышленная Сулига
**Джошуа Шмид
Асиф Саиф Уддин.
** Сяодун
Викас Прасад
Джейми Алессио
Ларс Крузе
Гильерме Каминья
Андреа Раббаглиетти
Итай Биттан
Ноа Холл
Пэн Вэйкан
Мариатта Виджая
Эд Морли
Павел Адамчак.
:github_user:`CoffeeExpress`
:github_user:`aviadatsnyk`
Брайан Шрейдер
Хосуэ Баландрано Коронель.
Том Клэнси
**Себастьян Войцеховски
Мейсам Азад.
**Виллем Тиарт
Чарльз Чан
Омер Кац
Милинд Шакья