Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2008 13:10:46

getme
От:
Зарегистрирован: 2008-12-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

г-н shiza не могли бы вы подкинуть кусок кода либо сслыку, особенно интересно как скрипт должен “ждать” пока часть созданных им
процессов не закончат работу.



Офлайн

#2 Дек. 13, 2008 13:13:10

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2255
Репутация: +  40  -
Профиль   Отправить e-mail  

как не нагружать сервер

глупость по-моему, возьми pycurl и сделай что надо в несколько потоков, или асинхронно и просто ограничь их к-во, а память на сервере думаю не скоро кончится, ты же не архивы качаешь)

зы: делал в 300 потоков, https, всё ок

Офлайн

#3 Дек. 13, 2008 13:14:17

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

я предлагаю процессов не создавать, а делать все прям в скрипте.
тогда и ждать специально не придется.



Отредактировано (Дек. 13, 2008 13:22:36)

Офлайн

#4 Дек. 13, 2008 13:42:50

getme
От:
Зарегистрирован: 2008-12-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

slav0nic curl используется, глупости я в этом не вижу, твой скрипт видимо знал когда он кончится? поэтому ты запусках curl посылал запросы синхронно и тебе пофиг когда он закончится, главное ты знал это.

мой этого нет знает, у него будет рекурсия.


вообщем я тут почитал про threading и про fork
с последним пока не рабозрался.


вот набросал код, треды работают
хотел бы узнать мнения

import time
import threading

class myThread(threading.Thread):

def run(self):
print 'I am a thread!'
time.sleep(3)


th = myThread()
th.start()

i = 1
while i < 10:
print th.isAlive()
time.sleep(1)
i = i+1
аупут:
C:\public_html>python test.py
True
I am a thread?
True
True
True
False
False
False
False
False
насколько разумно использовать ‘sleep’ в цикле чтобы заставить скрипт ждать?



Отредактировано (Дек. 13, 2008 13:44:38)

Офлайн

#5 Дек. 13, 2008 14:32:48

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

getme
curl используется, глупости я в этом не вижу, твой скрипт видимо знал когда он кончится? поэтому ты запусках curl посылал запросы синхронно и тебе пофиг когда он закончится, главное ты знал это.
Толи у меня недопонимание задачи, толи у тебя общее недопонимание. При чем тут вообще синхронность - это уже вопрос организации алгоритма.

Если нужно меньше нагружать сервер, тоже рекомендую pyCurl. В частности CurlMulti. Он асинхронный ;)
Для равномерного распределения нагрузки, можно ограничить скорость скачки. И количество потоков (это уже вручную).



Офлайн

#6 Дек. 13, 2008 15:08:52

getme
От:
Зарегистрирован: 2008-12-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

shiza
Толи у меня недопонимание задачи, толи у тебя общее недопонимание.
Обход сайта рекурсивный, т.е получил страницу, обработал, выдрал с нее внешние/внутрение ссылки пошел к ним. и.тд

количество созданных запросов/обработок может вырасти в десятки/сотни.

другое дело если у меня есть 300 урлов которые я запихнул в CurlMulti запустил о пошел курить.



Отредактировано (Дек. 13, 2008 15:09:24)

Офлайн

#7 Дек. 13, 2008 17:15:27

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

как не нагружать сервер

Я бы посоветовал посмотреть в сторону Process Pools. Это живет здесь: multiprocessing.Pool http://docs.python.org/library/multiprocessing.html
В отличие от тредов это будет работать на разных корах, если таковые имеются, конечно. Ну и количество процессов в пуле задается при его создании.
Если все таки нужно смотреть загрузку, то можно использовать сам multiprocessing, но тогда нужно будет следить за количеством процессов самостоятельно.

PS: не смущайтесь, что это только в 2.6, сам processing есть отдельно, кроме того есть порты multiprocessing на 2.4 и 2.5



Отредактировано (Дек. 13, 2008 17:16:01)

Офлайн

#8 Дек. 13, 2008 17:43:35

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2255
Репутация: +  40  -
Профиль   Отправить e-mail  

как не нагружать сервер

getme
что тебе мешает одновременно грузить не больше этих “300 урлов”?
у тебя имхо не понимание задачи, чтоли покажи код, хотяб как получаешь страницы

Офлайн

#9 Дек. 13, 2008 23:08:49

getme
От:
Зарегистрирован: 2008-12-12
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

ладно хлопцы, вернусь к вам скоро с скриптом
тогда и будем говорить :)



Офлайн

#10 Дек. 13, 2008 23:24:02

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

как не нагружать сервер

getme
Обход сайта рекурсивный, т.е получил страницу, обработал, выдрал с нее внешние/внутрение ссылки пошел к ним. и.тд

количество созданных запросов/обработок может вырасти в десятки/сотни.

другое дело если у меня есть 300 урлов которые я запихнул в CurlMulti запустил о пошел курить.
Ок. Теперь я вижу что недопонимание - у тебя.
То что ты называешь синхронностью и асинхронностью связано больше с алгоритмом и структурами данных, чем с нитями или Curl.
И в том и в другом случае можно организовать и то и другое.



Отредактировано (Дек. 14, 2008 09:29:56)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version