24 октября 2006
Нити в Python: от простого к сложному

Теги: Ссылки Статьи Threads

Понравилась статья Дэвида Нейлора "Threaded data collection with Python, including examples". Весьма грамотная статья. Ставится задача (обработка большого количества feed-ов), пишется простейшая реализация и потом, шаг за шагом, усложняется. На каждом этапе описываются недостатки и обосновывается усложнение алгоритма. При этом язык простой и статья читается на одном дыхании. В общем, рекомендую к прочтению. На закуску ссылка на статьи по теме нитей в Python.

Юревич Юрий 24 октября 2006, 00:57

Комментарии

slav0nic 26 октября 2006, 01:21

в принципе ничего особого, но про Queue интересно, наверно потомучто я их не юзал%)) и не думаю что стоит юзать, не вижу в чём плюсы, писал парсер для чекания доменов на рейтинг и тп, работало в 100потоков на 2 сайта = 200потоков по 64кб минимум 1 страница%) всё по классике прекрасно отработало

Vladimir 10 ноября 2006, 11:25

А мне идея c Queue очень да же понравилась (учитывая что не обращал на нее внимание вообще), теперь вот пишу занимательный скрипт для проверки кучки сайтов, основываясь на эту статью.

Pak 10 ноября 2006, 17:48

Хорошая и познавательная статья, спасибо. Неясно только зачем “Make sure your functions.parse_feed can produce picklable objects”.

Юревич Юрий 13 ноября 2006, 09:53

Общий контекст такой:



Better support for multi-core machines. The Python global interpreter lock prevents more than one thread from running at a time, however you can still spread your threads over multiple cores (I believe). What you might want to consider is throwing a few os.fork() calls in, forcing your program to multiprocess, which could then take full advantage of multiple cores. You can do this by either dividing up your work queue at the start, or by moving the heavy lifting out of the main thread and into seperate processes. Your main thread could then communicate with these “worker” processes via shared memory or sockets (my preference) then pass back the results. Make sure your functions.parse_feed can produce picklable objects.



Better support for multi-core machines. The Python global interpreter lock prevents more than one thread from running at a time, however you can still spread your threads over multiple cores (I believe). What you might want to consider is throwing a few os.fork() calls in, forcing your program to multiprocess, which could then take full advantage of multiple cores. You can do this by either dividing up your work queue at the start, or by moving the heavy lifting out of the main thread and into seperate processes. Your main thread could then communicate with these “worker” processes via shared memory or sockets (my preference) then pass back the results. Make sure your functions.parse_feed can produce picklable objects.


Т.е. разговор идет об “обходе” GIT на многопроцессорной машине. И в качестве варианта предлагается вынести “тяжелую” часть кода в отдельные процессы и общаться между процессами через общую память либо сокет. И неявно полагается, что объект распарсенного rss будет сериализироваться (pickle) и отдаваться строкой через общую память/сокет главному процессу.

Michael Samoylov 18 января 2007, 20:28

статья шикарная (по стилю и качеству изложения). спасибо ;)

redbaron 1 апреля 2007, 10:50

Почитал про global lock (.html) это что же получается - любой код на python изначально является thread safe? Тогда зачем придуманы разные lock()?

Юревич Юрий 16 сентября 2007, 15:29

Ссылка уже битая. Теперь ищите по этой:

Оставьте свой комментарий