2015-08-04 2 views
1

Я хочу использовать веб-работников для обработки данных изображения в кусках и применения фильтров к данным изображения, поскольку работа непосредственно над потоком пользовательского интерфейса выглядит медленной. (Мой вопрос не специфичен для обработки данных изображений в грандиозной схеме вещей)Остановка веб-мастера при обработке большого количества данных?

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

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

Если разделить его на лучший способ, как бы вы поступили, по существу, уступая? Я предполагаю, что это будет какой-то 1 миллисекундный тайм-аут, который затем позволяет циклу событий обрабатывать входящие сообщения, а затем моя функция процесса забирает место, где она была остановлена, но если это не способ сделать это, может кто-то предложить другой?

+0

Просто используйте генератор, который дает каждые 100 итераций и возобновляется с помощью 'setTimeout'. – Ginden

+0

Да, это звучит прекрасно. Конечно, вы также можете ['.terminate()'] (https://developer.mozilla.org/en-US/docs/Web/API/Worker/terminate) рабочего, не знаете, какую отмену вы хотите делать и как часто вам это нужно. – Bergi

+0

Я думал об использовании .terminate(), но я думаю, что накладные расходы на воссоздание веб-работников могут испортить преимущество их использования. Я думаю, что событие отмены может быть вызвано довольно часто, потому что мне нужны ползунки и в зависимости от ввода пользователя, если они меняют значения перед его обработкой, что весьма вероятно, что он замедлит его. –

ответ

1

Вы можете использовать своего основного веб-работника, чтобы развернуть подработчиков, а не «yeilding» ... так что пусть основной веб-работник, которого вы создаете для обработки изображений, обрабатывает как входящие сообщения из основного потока пользовательского интерфейса, так и создает куски данных для задач обработки изображений, которые он выдает своим собственным подработчикам. Таким образом, вы можете легко прекратить или управлять любыми детьми-работниками в зависимости от того, какие сообщения поступают из основного потока пользовательского интерфейса, и ваш основной веб-работник остается отзывчивым в любое время без блокировки, нуждаясь в некоторой форме «доходности» или подождите некоторое фиксированное время ожидания, прежде чем он сможет снова ответить на сообщения.

Смежные вопросы