Лучший способ выбрать случайный файл из каталога

Если вы хотите просто избежать использования сотен сервисов, вы можете настроить один входной контроллер nginx (с одним входным классом в вашем кластере), а затем создать несколько входящих . ] используя единственный входной контроллер. (Это также может быть один Ingress, если хотите, с маршрутизацией на основе имени хоста)

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

Контроллер nginx заботится о перезагрузке nginx с новыми конфигами каждый раз, когда вы их меняете (без простоя). Вы также можете иметь SSL-завершение для каждого входа в Kubernetes, так что если у вас есть несколько доменов, которые также можно обрабатывать.

Надеюсь, это поможет!

31
задан JasonSmith 28 May 2009 в 07:43
поделиться

5 ответов

import os, random
random.choice(os.listdir("C:\\")) #change dir name to whatever

Относительно Вашего отредактированного вопроса: во-первых, я предполагаю, что Вы знаете риски использования a dircache, а также то, что это удержано от использования с тех пор 2.6 и удалено в 3,0.

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

Кроме этого, я не понимаю, почему Вы видите любую проблему с этим решением. Это прекрасно.

63
ответ дан Yuval Adam 27 November 2019 в 21:44
поделиться

Если Вы хотите включенные каталоги, ответ A Yuval. Иначе:

import os, random

random.choice([x for x in os.listdir("C:\\") if os.path.isfile(os.path.join("C:\\", x))])
7
ответ дан mavnn 27 November 2019 в 21:44
поделиться

Решение агностика языка:

1) Получите общее количество нет. из файлов в указанном каталоге.

2) Выберите случайное число от 0 до [общее количество нет. из файлов - 1].

3) Получите список имен файлов как соответственно индексируемый набор или такой.

4) Выберите энный элемент, где n является случайным числом.

4
ответ дан karim79 27 November 2019 в 21:44
поделиться

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

Вот одна попытка:

import os
import random

def getRandomFile(path):
  """
  Returns a random filename, chosen among the files of the given path.
  """
  files = os.listdir(path)
  index = random.randrange(0, len(files))
  return files[index]

Править: Вопрос теперь упоминает страх перед "состоянием состязания", которое я могу только принять, типичная проблема файла того, чтобы быть, добавил/удалил, в то время как Вы находитесь в процессе попытки выбрать случайный файл.

Я не полагаю, что существует путь вокруг этого кроме учета того факта, что любая операция ввода-вывода по сути "небезопасна", т.е. это может перестать работать. Так, алгоритм для открытия случайным образом выбранного файла в данном каталоге должен:

  • На самом деле open() файл, выбранный, и дескриптор отказ, начиная с файла, больше не мог бы быть там
  • Вероятно, сам предел количеству набора попыток, таким образом, это не умирает, если каталог пуст или если ни один из файлов не читаем
1
ответ дан unwind 27 November 2019 в 21:44
поделиться

Independant с языка использовал, можно считать все ссылки на файлы в каталоге в datastructure как массив (что-то как 'listFiles'), получить длину массива. вычислите случайное число в диапазоне '0' к 'arrayLength-1' и получите доступ к файлу в определенном индексе. Это должно работать, не только в Python.

1
ответ дан Mork0075 27 November 2019 в 21:44
поделиться
Другие вопросы по тегам:

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