Форум сайта python.su
г-н shiza не могли бы вы подкинуть кусок кода либо сслыку, особенно интересно как скрипт должен “ждать” пока часть созданных им
процессов не закончат работу.
Офлайн
глупость по-моему, возьми pycurl и сделай что надо в несколько потоков, или асинхронно и просто ограничь их к-во, а память на сервере думаю не скоро кончится, ты же не архивы качаешь)
зы: делал в 300 потоков, https, всё ок
Офлайн
я предлагаю процессов не создавать, а делать все прям в скрипте.
тогда и ждать специально не придется.
Отредактировано (Дек. 13, 2008 13:22:36)
Офлайн
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
Отредактировано (Дек. 13, 2008 13:44:38)
Офлайн
getmeТоли у меня недопонимание задачи, толи у тебя общее недопонимание. При чем тут вообще синхронность - это уже вопрос организации алгоритма.
curl используется, глупости я в этом не вижу, твой скрипт видимо знал когда он кончится? поэтому ты запусках curl посылал запросы синхронно и тебе пофиг когда он закончится, главное ты знал это.
Офлайн
shizaОбход сайта рекурсивный, т.е получил страницу, обработал, выдрал с нее внешние/внутрение ссылки пошел к ним. и.тд
Толи у меня недопонимание задачи, толи у тебя общее недопонимание.
Отредактировано (Дек. 13, 2008 15:09:24)
Офлайн
Я бы посоветовал посмотреть в сторону 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)
Офлайн
getme
что тебе мешает одновременно грузить не больше этих “300 урлов”?
у тебя имхо не понимание задачи, чтоли покажи код, хотяб как получаешь страницы
Офлайн
ладно хлопцы, вернусь к вам скоро с скриптом
тогда и будем говорить :)
Офлайн
getmeОк. Теперь я вижу что недопонимание - у тебя.
Обход сайта рекурсивный, т.е получил страницу, обработал, выдрал с нее внешние/внутрение ссылки пошел к ним. и.тд
количество созданных запросов/обработок может вырасти в десятки/сотни.
другое дело если у меня есть 300 урлов которые я запихнул в CurlMulti запустил о пошел курить.
Отредактировано (Дек. 14, 2008 09:29:56)
Офлайн