Как это сделать (PHP) в Python или Ruby? - PullRequest
1 голос
/ 21 июля 2010

Мое приложение берет более длинный список URL-адресов и разбивает его на X (где X = $ threads), чтобы я мог запустить файл thread.php и рассчитать для него URL-адреса.Затем он выполняет запрос GET и POST для получения данных

Я использую это:

for($x=1;$x<=$threads;$x++){
    $pid[] = exec("/path/bin/php thread.php <options> > /dev/null & echo \$!");
}

Для «многопоточности» (я знаю, что это не совсем многопоточность, это разветвление или что?),Я сохраняю pids в файл для последующей проверки, запущен ли поток N, и для их остановки.

Теперь я хочу выйти из php, я думал об использовании python, потому что я хотел бы узнать больше оэто.

Как я могу добиться такого рода "многопоточности" с питоном? (или ruby)

Или есть лучший способзапускать несколько фоновых потоков в python или ruby, которые работают параллельно (одновременно)?

Потоки не должны обмениваться данными друг с другом или с основным потоком, онинезависимые, они запрашивают http и взаимодействуют с базой данных mysql, им может понадобиться получить доступ / изменить одни и те же записи таблицы (я еще не думал об этом или о том, как я это решу).

Приложение работаетс «проектами» у каждого проекта есть переменная «максимальных потоков» иЯ использую веб-интерфейс для управления им (поэтому я все еще могу использовать php для интерфейса [запуск / остановка потоков] в новом приложении).

Я хотел использовать

from threading import Thread

вPython, но мне сказали, что эти потоки не будут работать параллельно, но по одному разу.

Приложение предназначено для запуска на веб-серверах Linux.

Любое предложение будет оценено.

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Для Python 2.6+ рассмотрим модуль multiprocessing :

multiprocessing - это пакет, который поддерживает процессы порождения с использованием API, аналогичного модулю потоков.Многопроцессорный пакет предлагает как локальный, так и удаленный параллелизм, эффективно обходя блокировку глобального интерпретатора, используя подпроцессы вместо потоков.Благодаря этому многопроцессорный модуль позволяет программисту полностью использовать несколько процессоров на данном компьютере.Он работает как в Unix, так и в Windows

Для Python 2.5 та же функциональность доступна через pyprocessing .

В дополнение к примеру по ссылкам выше,вот несколько дополнительных ссылок, с которых можно начать:

1 голос
/ 21 июля 2010

Вы не хотите, чтобы потоки.Вам нужна рабочая очередь, подобная Gearman , в которую вы можете отправлять задания асинхронно.

Стоит отметить, что это кроссплатформенное, мультиязычное решение.Есть привязок для многих языков (включая Python и PHP) , предоставляемых официально, и многие другие неофициально с небольшой работой с Google.точно так же только с одной машиной.По сути, вы можете создать одного или нескольких работников, которые будут слушать вакансии.Вы можете контролировать количество работников и типы заданий, которые они могут слушать.

Если вы вставите пять заданий в очередь одновременно, и там окажется пять рабочих, ожидающих, каждому из них будет вручено одно из заданий.Если заданий больше, чем рабочих, задания обрабатываются последовательно.Ваш клиент (отправляющий задания) может либо дождаться завершения всех созданных заданий, либо просто поместить их в очередь и продолжить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...