Playframework управление параллельными заданиями - PullRequest
2 голосов
/ 06 декабря 2011

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

  • первое задание быстрое: оно пытается получить два разных URL-адреса с помощью метода WS.url () и записать полученный статус в базу данных. Три попытки сделаны, если веб-сайт не отвечает. Выполнение этой задачи занимает менее 20 секунд и будет выполняться каждые 5 минут.

  • вторая работа медленная: она разбирает контент на обоих сайтах, если их статус записан в базу данных в порядке. Этот процесс занимает около 2 минут и будет выполняться каждый час.

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

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Если вы хотите упростить процесс, вы можете начать вторую работу с первой ..

Ваша последняя строка после проверки службы завершена

new URLParserJob().now();
2 голосов
/ 06 декабря 2011

Решением будет сохранение какого-либо флага в базе данных (где вы записываете состояние), чтобы второе задание обнаруживало, может оно выполняться или нет.Теперь, это было бы решением, но оно могло иметь некоторые проблемы в определенных сценариях.

Учитывая, что оба задания связаны (одно «пингует» URL-адрес, другое анализирует его), первое выполняется очень быстро при выполнении, что (в данном сценарии) состояние, полученное первым заданием, равноне имеет значения для кого-либо, кроме второго задания, и что пинг URL-адреса 12 раз в час, когда вы будете использовать последний результат один раз в час, кажется пустой тратой ресурсов (как на вашем сайте, так и на сайтах, на которые вы пингуете), я бы предложил объединить обе задачив одну работу.

Если у вас есть одна работа, вам больше не придется беспокоиться о параллелизме.Просто запускайте его раз в час.

...