Блог Толика Вострякова

Живой опыт программирования, Python, Django, современные языки и немного фотографий
Блог - новые записи и ссылки (Atom)

Игры с Manager, Lock из multiprocessing модуля -

В одном проекте я использовал redis для хранения статистики, собираемой из нескольких процессов python на одной машине. Статистика складывалась в redis в hash или словарь. Попробовал заменить место хранения на словарь в питоне и вот, что из этого вышло:

from multiprocessing import Pool, Manager, Lock

lock = Lock()
manager = Manager()
stats_dict = manager.dict()

Проще не получилось, так как в разделяемой памяти (Shared Memory) нету такого класса, как словарь в multiprocessing модуле. Код, демонстрирующий использование:

def save_stats(x):
    lock.acquire()
    if not stats_dict.has_key('test'):
        stats_dict['test'] = 0
    for i in range(100):
        stats_dict['test'] += 1
    lock.release()

if __name__ == "__main__":
    pool = Pool(processes=4)
    pool.map(save_stats, [1, 2, 4, 5])

    print stats_dict

Как видим одновременно запускаются четыре процесса, выполняющие процедуру save_stats. После окончания, в поле 'test' окажется 400. Никаких race conditions. Вот думаю теперь насколько это лучше просто redis. Выглядит примерно одинаково по эффективности.

Комментарии: 8

fr.butch - 17.02.2014

if not statsdict.haskey('test'):
первый раз вижу чтобы реально кто то использовал haskey вместо key in dict. haskey кстати выкинули из 3.х. но это кажется не аргумент.


сам недавно думал как организовать тысячи паралельных http head запросов, остановился в итоге на асинхронном tornado httpclient.
svetlyak40wt - 17.02.2014 Redis в конечном счете, более универсален. Что если ты со временем будешь запускать свои процессы на разных машинах? Тут уже dict из multiprocessing не подойдет никак.
Feskirs - 16.01.2017
GenrytomGex - 16.01.2017 Кстати, а кто-нибудь слышал про инвест проект - http://goo.gl/EiVm0G ?
Galenergy - 18.01.2017 какого диаметра трубы использовать отопления дома [url=http://montazh-elisa.ru/otoplenie/otoplenie-pod-klyuch.html]электрическое отопление под ключ[/url] автономное газовое отопление дома екатеринбург и областьрасчет отопления частного дома [url=http://moskva-elisa.ru]монтаж систем канализации[/url] расход газа на отопление дома инфоакрасным обогревателемустановка инженерных систем пересветпроектирование оборотного водоснабжения [url=http://otoplenie-elisa.ru/dzerzhinskij.html]отопление коттеджа дзержинский[/url] обслуживание инженерных систем в электроуглях [url=http://santeh-elisa.ru/raschet-radiatorov-otopleniya.html]расчет радиаторив отопления[/url] технологическая карта монтажа аккумуляторных батарей типа opzvводоснабжение квартиры [url=http://ustanovka-elisa.ru/sergiev-posad.html]отопление сергиев посад[/url]
KolyanCap - 20.01.2017 Девчонки покупаем со скидкой 50% сыворотку от морщин. Вещь действительно хорошая, покупатели омолодились и остались довольны. Отзывы смотрите на странице заказа и не забывайте оставлять свои. За праздники все раскупили, осталось не много. Если у кого вопросы, пишите в личку, по возможности отвечу или уточните у нашего менеджера по телефону.

В БЛИЖАЙШИЕ ТРИ ДНЯ ЦЕНЫ СНИЖЕНЫ НА 50%. НЕ ОПОЗДЫВАЙТЕ https://vk.cc/66qq42

зы админы не ругайте, тему не стал создавать написал здесь
VirtsevBistrov - 21.01.2017 Здравствуйте, прошу прощения, что отвлек Вас отважных дел.

Меня зовут Николай, мне хотелось бы сделать выгодное для Вас предложение по эффективному и недорогому продвижению Вашего сайта vostryakov.ru при помощи размещения 900 вечных ссылок с тИЦ от 10 за 150 руб. с предоставлением полноценного отчета по каждой размещенной ссылке.

В случае, если Вас заинтересует мое предложение, пожалуйста, ознакомьтесь с полным описанием данной услуги на сайте http://proflinks.ru (тариф "Оптима") перед тем как создать заказ, нужно пройти регистрацию на сайте по ссылке: http://proflinks.ru/registration/10796 (это моя партнерская ссылка от сервиса Proflinks.ru, пожалуйста, регистрируйтесь обязательно по ней, заранее Вам благодарен)

Также, возможно Вас заинтересует тариф «Пробный», стоимость которого составляет всего 40 руб.

С уважением, Николай.

Добавить комментарий:


Буду использовать, только для связи с тобой

Чтобы и другие могли узнать о тебе

Вы можете использовать markdown разметку.

Например:
**жирный**
*курсив*
## Заголовок

Не используйте html-тэги. Все ссылки станут активными, все переводы строк будут заменены на <br>
captcha