Хотелось написать, что run_in_executor, вызываемыйto_thread, создает новый поток (thread) при каждом вызове, на основании того, что создается новыйThreadPoolExecutor, но тесты показывают обратное: при множестве вызовов to_thread ID потока (thread) ОС часто одинаковый:
def save_thread_id(test: str, path: str) -> None:
with open(path, 'a') as fh:
fh.write(f'\n{test}: {threading.get_native_id()}')
# It does not change the test results on my machine
time.sleep(1)
async def test_asyncio_to_thread():
path = 'asyncio_thread_test.txt'
try:
os.remove(path)
except FileNotFoundError:
pass
with open(path, 'a') as fh:
fh.write(f'main: {threading.get_native_id()}')
with ThreadPoolExecutor(max_workers=1) as pe:
pe.submit(save_thread_id, 'test1', path)
pe.submit(save_thread_id, 'test1', path)
pe.submit(save_thread_id, 'test1', path)
for _ in range(20):
await asyncio.to_thread(save_thread_id, 'test2', path)
if __name__ == '__main__':
asyncio.run(test_asyncio_to_thread())
Более подробный ответ на первый вопрос: Если есть несколько репозиториев под контролем версий с приложениями в контейнерах, которые не настроены на выход в сеть через тоннель, но для разработки их нужно запускать с выходом в сеть через тоннель или напрямую, не меняя файлы под контролем версий (docker-compose.yml, Dockerfile), держать настройки запуска через тоннель в том же репозитории, но не под контролем версий и удобно запускать приложения.
С подходом с Wireguard в отдельном контейнере нужно добавить в каждый репозиторий docker-compose.override.yml файл с network_mode: 'container:vpn' и networks: - vpn и запускать как обычно.
В Telegram канале по распознаванию речи высказывали мнение, что не нужно подавать больше секунды звука за раз, однако, мне неизвестно четкое объяснение почему именно так.
Не удалось найти в документации описание метода AcceptWaveform, но для себя имею такое пояснение: «AcceptWaveform возвращает true, когда обнаружена тишина и данные могут быть получены через метод Result. Если тишина не обнаружена, частичные данные можно получить через метод PartialResult. Вызов метода FinalResult сбрасывает внутреннее состояние объекта и возвращает оставшийся результат».
Вызов FinalResult вместо Result, если AcceptWaveform вернул положительный результат иногда помогает получить более точное распознавание, если, например, за громкой длинной фразой следует короткая тихая фраза. В таких случаях Result может вернуть только первую фразу, даже если между двумя фразами и после последней фразы есть тишина.
Хотелось написать, что run_in_executor, вызываемый to_thread, создает новый поток (thread) при каждом вызове, на основании того, что создается новый ThreadPoolExecutor, но тесты показывают обратное: при множестве вызовов to_thread ID потока (thread) ОС часто одинаковый:
cat asyncio_thread_test.txtmain: 316512
test1: 316513
test1: 316513
test1: 316513
test2: 316517
test2: 316517
test2: 316517
...
test2: 316517
del
Более подробный ответ на первый вопрос: Если есть несколько репозиториев под контролем версий с приложениями в контейнерах, которые не настроены на выход в сеть через тоннель, но для разработки их нужно запускать с выходом в сеть через тоннель или напрямую, не меняя файлы под контролем версий (docker-compose.yml, Dockerfile), держать настройки запуска через тоннель в том же репозитории, но не под контролем версий и удобно запускать приложения.
С подходом с Wireguard в отдельном контейнере нужно добавить в каждый репозиторий docker-compose.override.yml файл с
network_mode: 'container:vpn'иnetworks: - vpnи запускать как обычно.Интересный подход. Спасибо.
Нужно было решить такую задачу.
network_mode: "container:IDorName"считаю малоизвестной функцией. Если бы такая статья была на Хабре, то я бы сэкономил время.Может кто-нибудь скажет мне в комментариях, что есть решение еще лучше или укажет на ошибки.
https://github.com/Kunzisoft/KeePassDX есть под Android. Он обычные пароли хранит и TOTP тоже есть.
Да, в оригинале
while (!__comp(*--__j, *__m));Это опечатка? Должно быть
--__j?Команды
docker initнет в официальной документации, может вы имели ввидуdocker swarm init?В серверной реализации тоже.
В Telegram канале по распознаванию речи высказывали мнение, что не нужно подавать больше секунды звука за раз, однако, мне неизвестно четкое объяснение почему именно так.
Не удалось найти в документации описание метода AcceptWaveform, но для себя имею такое пояснение: «AcceptWaveform возвращает true, когда обнаружена тишина и данные могут быть получены через метод Result. Если тишина не обнаружена, частичные данные можно получить через метод PartialResult. Вызов метода FinalResult сбрасывает внутреннее состояние объекта и возвращает оставшийся результат».
Вызов FinalResult вместо Result, если AcceptWaveform вернул положительный результат иногда помогает получить более точное распознавание, если, например, за громкой длинной фразой следует короткая тихая фраза. В таких случаях Result может вернуть только первую фразу, даже если между двумя фразами и после последней фразы есть тишина.