Вы можете использовать пользовательский formats.py
(см. « Создание файлов пользовательского формата » в документации Django) и определить THOUSAND_SEPARATOR
и DECIMAL_SEPARATOR
THOUSAND_SEPARATOR = ''
DECIMAL_SEPARATOR = '.'
Это глобальный параметр, поэтому он будет влиять на все поплавки, отображаемые на вашем сайте. И вам придется включить локализацию (USE_L10N
в вашем settings.py).
Если у вас есть контроль над шаблоном, вы можете просто удалить фильтр floatformat
.
edit : Я не уверен, но, возможно, вы стали жертвой этой ошибки Django: # 13617 . Попробуйте отключить поддержку локализации в файле settings.py и посмотрите, исчезают ли ошибочные запятые:
USE_L10N = False
Если это так, взгляните на различные обходные пути, упомянутые в отчет об ошибке (самое простое - отключить локализацию, если она вам вообще не нужна).
В основном все сводится к тому, какой уровень контроля над распараллеливанием вы хотите. OpenMP отлично подходит, если все, что вам нужно, - это добавить несколько операторов #pragma и довольно быстро получить параллельную версию вашего кода. Если вы хотите делать действительно интересные вещи с помощью кодирования MIMD или сложной организации очередей, вы все равно можете делать все это с помощью OpenMP, но, вероятно, в этом случае намного проще использовать потоки. OpenMP также имеет аналогичные преимущества в переносимости, поскольку многие компиляторы для разных платформ теперь поддерживают его, как и pthreads.
Итак, вы абсолютно правы - если вам нужен точный контроль над распараллеливанием, используйте pthreads. Если вы хотите распараллеливать с минимальными затратами времени, используйте OpenMP.
Каким бы путем вы ни решили пойти, удачи!
Еще одна причина: OpenMP основан на задачах, Pthreads основан на потоках. Это означает, что OpenMP будет выделять столько же потоков, сколько и количество ядер. Таким образом вы получите масштабируемое решение. Сделать это с использованием сырых потоков не так-то просто.
Второе мнение: OpenMP предоставляет функции сокращения: когда вам нужно вычислить частичные результаты в потоках и объединить их. Вы можете реализовать это, используя одну строку кода. Но, используя необработанные потоки, вы должны выполнять больше работы.
Просто подумайте о своих требованиях и попытайтесь понять: достаточно ли OpenMP для вас? Вы сэкономите много времени.
OpenMP требует компилятора, который его поддерживает и работает с прагмами. Преимущество заключается в том, что при компиляции без поддержки OpenMP (например, PCC или Clang/LLVM на данный момент), код все равно будет скомпилирован. Также, взгляните на то, что Чарльз Лейзерсон написал о многопоточности DIY.
Pthreads - это стандарт POSIX (IEEE POSIX 1003.1c) для библиотек, в то время как Спецификации OpenMP должны быть реализованы на компиляторах; при этом существует множество реализаций pthread (e. например, rthreads OpenBSD, NPTL), и ряд компиляторов, поддерживающих OpenMP (например, GCC с флагом -fopenmp, MSVC++ 2008).
Pthreads эффективны для распараллеливания только тогда, когда доступно несколько процессоров, и только тогда, когда код оптимизирован под количество доступных процессоров. В результате код для OpenMP более легко масштабируется. Можно смешивать код, который компилируется с OpenMP, с кодом, использующим pthreads.
.