Найти - Пользователи
Полная версия: как не нагружать сервер
Начало » Network » как не нагружать сервер
1 2 3
getme
г-н shiza не могли бы вы подкинуть кусок кода либо сслыку, особенно интересно как скрипт должен “ждать” пока часть созданных им
процессов не закончат работу.
slav0nic
глупость по-моему, возьми pycurl и сделай что надо в несколько потоков, или асинхронно и просто ограничь их к-во, а память на сервере думаю не скоро кончится, ты же не архивы качаешь)

зы: делал в 300 потоков, https, всё ок
shiza
я предлагаю процессов не создавать, а делать все прям в скрипте.
тогда и ждать специально не придется.
getme
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’ в цикле чтобы заставить скрипт ждать?
shiza
getme
curl используется, глупости я в этом не вижу, твой скрипт видимо знал когда он кончится? поэтому ты запусках curl посылал запросы синхронно и тебе пофиг когда он закончится, главное ты знал это.
Толи у меня недопонимание задачи, толи у тебя общее недопонимание. При чем тут вообще синхронность - это уже вопрос организации алгоритма.

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

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

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

PS: не смущайтесь, что это только в 2.6, сам processing есть отдельно, кроме того есть порты multiprocessing на 2.4 и 2.5
slav0nic
getme
что тебе мешает одновременно грузить не больше этих “300 урлов”?
у тебя имхо не понимание задачи, чтоли покажи код, хотяб как получаешь страницы
getme
ладно хлопцы, вернусь к вам скоро с скриптом
тогда и будем говорить :)
shiza
getme
Обход сайта рекурсивный, т.е получил страницу, обработал, выдрал с нее внешние/внутрение ссылки пошел к ним. и.тд

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

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