Найти - Пользователи
Полная версия: Почему встроенные модули такое УГ?
Начало » Network » Почему встроенные модули такое УГ?
1 2 3 4 5 6 7
slav0nic
asilyator
Что будут делать другие потоки при кооперативной многозадачности и что при настоящей (забыл как ее зовут), если один из них займет процессор на время, намного большее кванта времени, выделенной одному треду.

это всё решается, не в лоб. В twisted таки запускается тред, в других - генераторы и тп.
если у тебя есть такое в асинхронном коде, то тут ошибка программиста и “что-то делаешь не так”, залипать на одном участке кода программа не нужна.
lorien
> У меня построение дерева с помощью html5lib где-то столько занимает на вполне обычной странице.
Код в студию, хоть посмеюсь ))

> Тут проблема должна быть в чем-то другом. Код можно?
Можно. Предлагаю такой вариант, дан файл с 10000 урлами из интернет. Вы пишите на тредах, я на асинхроном спайдере. Далее запускем и смотрим время выполнения. Допустим, качаем в 150 потоков. DOM-дерево не строим, просто сохраняем полученные страницы в файлы (1.html -> 10000.html

> Кооперативная многозадачность - не серебрянная пуля. Кто-то хочет меня переубедить?
Тут никто и не говорит, что асинхронность это серебряная пуля. Мы тут просто опытом обмениваемся.
slav0nic
asilyator
В чем горе от ума?
а ты уже прочёл, что я тебе сказал ? Или читать для тебя непосильная задача, и программист должен лишь буквы в редактор подставлять и вуаля? :P

asilyator
Т.е. чтобы отказаться от тредов

мы тут вроде как о большом количестве тредов, нормальное количество тредов никто не мешает юзать при особом желании, да и проще это чем асинхронное программирование.
lorien
Вот-вот. Т.е. чтобы отказаться от тредов, надо доказать, что кусочки не могут быть долгими или, хотя бы, что треды не подходят. Возьметесь?
Я уже год пишу асинхронные спайдеры. Заработал тысячи долларов на этом. На кой хер мне вам что-то доказывать ))
asilyator
slav0nic
это всё решается, не в лоб. В twisted таки запускается тред, в других - генераторы и тп.
Ручками, как я понимаю? А если проггер не предполагал, что там будет что-то долгое? Во все места async пихать предлагаешь?

slav0nic
залипать на одном участке кода программа не нужна.
См. выше про html5lib. Вполне может случиться, что у разработчика “все работает”, а у юзера на других условиях рисуется другая картина.

lorien
> Тут проблема должна быть в чем-то другом. Код можно?
Можно. Предлагаю такой вариант, дан файл с 10000 урлами из интернет. Вы пишите на тредах, я на асинхроном спайдере. Далее запускем и смотрим время выполнения. Допустим, качаем в 150 потоков. DOM-дерево не строим, просто сохраняем полученные страницы в файлы (1.html -> 10000.html
Код в студию.
lorien
> Код в студию.
Сначала вы код предоставьте. Потом я, такой код мне писать 10 минут. Выкладывайте свой код, потом выложу я. В начале скрипта нужно объявить переменную, в которой будет путь к файлу, скрипт считывает оттуда все адреса документов (их будет 10000) и скачивает документы в 150 потоков, каждый документ сохраняется в файл с уникальным именем в каталог dump (dump/1.html, dump/2.html и т.д.). В случае сетевой ошибки файл можно не сохранять.
slav0nic
asilyator
А если проггер не предполагал, что там будет что-то долгое?
давай ты сначала что-то сам попробуешь написать, а то как монолог получается, у тебя нет базы в данном вопросе, а туда же.
Нормальный программист прекрасно понимает где можно словить Long-running операцию. Погугли на тему “asynс long-running operation” и посмотри где как поступают (зачастую тупо запускают в отдельном треде/процессе)

или поиграйся с asyncore и http://docs.python.org/dev/library/concurrent.futures.html , чтоб уловить суть.
Я уже сказал, если тебе хватает тредов - юзай их, если у тебя всё упирается “мне надо 500 тредов”, то что-то ты делаешь не так.
asilyator
slav0nic
asilyator
А если проггер не предполагал, что там будет что-то долгое?

давай ты сначала что-то сам попробуешь написать, а то как монолог получается, у тебя нет базы в данном вопросе, а туда же.
Нормальный программист прекрасно понимает где можно словить Long-running операцию. Погугли на тему “asynс long-running operation” и посмотри где как поступают (зачастую тупо запускают в отдельном треде/процессе)
На 100% может предусмотреть?

У меня было такое, что в мюторренте подвисал гуй на время создания файла. Видимо, он “должен был” создаваться мгновенно, а у меня внешний диск, подключенный по usb 1.1. И это - IO, т.е. то, что по определению может блокировать. А на вычислительный операциях ты возьмешься их на 100% определить?

Это ручной труд программиста. В случае ошибки он подвешивает всю программу на время. В случае тредов это невозможно.
lorien
> Код в студию.
Сначала вы код предоставьте. Потом я, такой код мне писать 10 минут. Выкладывайте свой код, потом выложу я. В начале скрипта нужно объявить переменную, в которой будет путь к файлу, скрипт считывает оттуда все адреса документов (их будет 10000) и скачивает документы в 150 потоков, каждый документ сохраняется в файл с уникальным именем в каталог dump (dump/1.html, dump/2.html и т.д.). В случае сетевой ошибки файл можно не сохранять.
Выложите свой, раз Вы лучше с грабом знакомы, в чем проблема-то?
reclosedev
+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)
lorien
> Выложите свой, раз Вы лучше с грабом знакомы, в чем проблема-то?
Я хочу вам показать наглядную разницу между тредами и асинхронностью. Раз вы так рьяно защищаете треды, то я предлагаю вам честно сравнить два подхода. Когда вы выложите свой код, я выложу асинхронный. Затем сравним результаты.

Далее я просил вас выложить код, который у вас из обычной страницы делает DOM-дерево одну секунду. Где код?

Без кода говорить не о чем. Все ваши попытки спорить неизвестно с кем лишь делают из вас мишень для троллей.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB