BlockingQueue - заблокированный drainTo () методы

Все, что вам нужно сделать, это использовать:

pd.to_datetime(date,format='%Y&%W')

Отредактировано:

Это дало ошибку, что Day следует упомянуть, чтобы преобразовать его в datetime. Таким образом, чтобы решить, что мы добавляем -1 в конец (что означает понедельник ... вы можете добавить любое конкретное значение от 0 до 6, где каждое представляет день).

Затем возьмите «день недели», используя дополнительный% w в формате, и он будет работать:

pd.to_datetime(date.apply(lambda x: str(x)+'-0'), format="%Y%W-%w")

Помните, что для выполнения любой из вышеперечисленных операций значение в кадре даты должно быть серия должна быть строковым объектом. Если нет, вы можете легко конвертировать их, используя d.astype (str), а затем выполнить все эти операции.

27
задан user443854 15 May 2013 в 17:54
поделиться

3 ответа

Вы имеете в виду комментарий в JavaDoc :

Кроме того, поведение этой операции не определено, если указанная коллекция изменяется во время выполнения операции.

Я считаю, что это относится к коллекции list в вашем примере:

blockingQueue.drainTo(list);

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

С другой стороны, вы имеете в виду, что когда вы вызываете dryTo , вы хотите, чтобы он заблокировать до тех пор, пока в очередь не будет добавлен хотя бы один объект? В этом случае у вас мало выбора, кроме:

list.add(blockingQueue.take());
blockingQueue.drainTo(list);

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

Примечание: Начиная с Java 7, для получения и помещения используется отдельная блокировка , Операции Put теперь разрешены во время операции DrainTo (и ряда других операций Take).

33
ответ дан 28 November 2019 в 05:04
поделиться

Я нашел эту модель полезной.

List<byte[]> blobs = new ArrayList<byte[]>();
if (queue.drainTo(blobs, batch) == 0) {
   blobs.add(queue.take());
}
5
ответ дан Daneel S. Yaitskov 28 November 2019 в 05:04
поделиться

С доступным API, я не думаю, что вы станете намного более элегантным. Кроме того, вы можете удалить тест размера.

Если вы хотите атомарно получить непрерывную последовательность элементов, даже если другая операция удаления совпадает, я не верю, что даже DrainTo гарантирует это.

0
ответ дан 28 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: