Форум сайта python.su
asilyator
Что будут делать другие потоки при кооперативной многозадачности и что при настоящей (забыл как ее зовут), если один из них займет процессор на время, намного большее кванта времени, выделенной одному треду.
Офлайн
> У меня построение дерева с помощью html5lib где-то столько занимает на вполне обычной странице.
Код в студию, хоть посмеюсь ))
> Тут проблема должна быть в чем-то другом. Код можно?
Можно. Предлагаю такой вариант, дан файл с 10000 урлами из интернет. Вы пишите на тредах, я на асинхроном спайдере. Далее запускем и смотрим время выполнения. Допустим, качаем в 150 потоков. DOM-дерево не строим, просто сохраняем полученные страницы в файлы (1.html -> 10000.html
> Кооперативная многозадачность - не серебрянная пуля. Кто-то хочет меня переубедить?
Тут никто и не говорит, что асинхронность это серебряная пуля. Мы тут просто опытом обмениваемся.
Офлайн
asilyatorа ты уже прочёл, что я тебе сказал ? Или читать для тебя непосильная задача, и программист должен лишь буквы в редактор подставлять и вуаля? :P
В чем горе от ума?
asilyator
Т.е. чтобы отказаться от тредов
Офлайн
Вот-вот. Т.е. чтобы отказаться от тредов, надо доказать, что кусочки не могут быть долгими или, хотя бы, что треды не подходят. Возьметесь?Я уже год пишу асинхронные спайдеры. Заработал тысячи долларов на этом. На кой хер мне вам что-то доказывать ))
Офлайн
slav0nicРучками, как я понимаю? А если проггер не предполагал, что там будет что-то долгое? Во все места async пихать предлагаешь?
это всё решается, не в лоб. В twisted таки запускается тред, в других - генераторы и тп.
slav0nicСм. выше про html5lib. Вполне может случиться, что у разработчика “все работает”, а у юзера на других условиях рисуется другая картина.
залипать на одном участке кода программа не нужна.
lorienКод в студию.
> Тут проблема должна быть в чем-то другом. Код можно?
Можно. Предлагаю такой вариант, дан файл с 10000 урлами из интернет. Вы пишите на тредах, я на асинхроном спайдере. Далее запускем и смотрим время выполнения. Допустим, качаем в 150 потоков. DOM-дерево не строим, просто сохраняем полученные страницы в файлы (1.html -> 10000.html
Офлайн
> Код в студию.
Сначала вы код предоставьте. Потом я, такой код мне писать 10 минут. Выкладывайте свой код, потом выложу я. В начале скрипта нужно объявить переменную, в которой будет путь к файлу, скрипт считывает оттуда все адреса документов (их будет 10000) и скачивает документы в 150 потоков, каждый документ сохраняется в файл с уникальным именем в каталог dump (dump/1.html, dump/2.html и т.д.). В случае сетевой ошибки файл можно не сохранять.
Офлайн
asilyatorдавай ты сначала что-то сам попробуешь написать, а то как монолог получается, у тебя нет базы в данном вопросе, а туда же.
А если проггер не предполагал, что там будет что-то долгое?
Отредактировано slav0nic (Июнь 14, 2012 14:03:44)
Офлайн
slav0nicНа 100% может предусмотреть?
asilyator
А если проггер не предполагал, что там будет что-то долгое?
давай ты сначала что-то сам попробуешь написать, а то как монолог получается, у тебя нет базы в данном вопросе, а туда же.
Нормальный программист прекрасно понимает где можно словить Long-running операцию. Погугли на тему “asynс long-running operation” и посмотри где как поступают (зачастую тупо запускают в отдельном треде/процессе)
lorienВыложите свой, раз Вы лучше с грабом знакомы, в чем проблема-то?
> Код в студию.
Сначала вы код предоставьте. Потом я, такой код мне писать 10 минут. Выкладывайте свой код, потом выложу я. В начале скрипта нужно объявить переменную, в которой будет путь к файлу, скрипт считывает оттуда все адреса документов (их будет 10000) и скачивает документы в 150 потоков, каждый документ сохраняется в файл с уникальным именем в каталог dump (dump/1.html, dump/2.html и т.д.). В случае сетевой ошибки файл можно не сохранять.
Офлайн
+1 адепт асинхронного IO
import grequests NWORKERS = 150 urls = [] # 1000 urls here or generator (from file etc) for i, response in enumerate(grequests.imap((grequests.get(url) for url in urls), size=NWORKERS)): if not response.ok: print('error with %s' % response.url) continue with open('%s.html' % i, 'wb') as file: file.write(response.content)
Отредактировано reclosedev (Июнь 14, 2012 14:14:23)
Офлайн
> Выложите свой, раз Вы лучше с грабом знакомы, в чем проблема-то?
Я хочу вам показать наглядную разницу между тредами и асинхронностью. Раз вы так рьяно защищаете треды, то я предлагаю вам честно сравнить два подхода. Когда вы выложите свой код, я выложу асинхронный. Затем сравним результаты.
Далее я просил вас выложить код, который у вас из обычной страницы делает DOM-дерево одну секунду. Где код?
Без кода говорить не о чем. Все ваши попытки спорить неизвестно с кем лишь делают из вас мишень для троллей.
Офлайн