диапазон в jinja2 внутри цикла for

GIL не предотвращает резьбу. Все GIL делает, чтобы только один поток выполнял код Python за раз; управление все еще переключается между потоками.

То, что GIL предотвращает, использует более одного ядра процессора или отдельных процессоров для параллельного запуска потоков.

Это относится только к коду Python , Расширения C могут и освобождают GIL, чтобы позволить нескольким потокам кода C и одному потоку Python работать через несколько ядер. Это распространяется на операции ввода / вывода, управляемые ядром, такие как select() вызовы для чтения и записи сокетов, что позволяет Python обрабатывать сетевые события с достаточной эффективностью в многопоточной многоядерной установке.

Сколько серверов развертывания затем выполняются, запускается более одного процесса Python, чтобы позволить ОС обрабатывать планирование между процессами для использования ваших процессорных ядер до максимума. Вы также можете использовать библиотеку multiprocessing для обработки параллельной обработки нескольких процессов из одного кода и родительского процесса, если это подходит для ваших случаев использования.

Обратите внимание, что только GIL применимы к реализации CPython; Jython и IronPython используют другую реализацию потоковой передачи (собственные встроенные потоки Java VM и .NET соответственно).

Для прямого обращения к вашему обновлению: любая задача, которая пытается получить ускорение скорости от параллельного выполнения, используя чистые Python, не будет видеть ускорение, поскольку поточный код Python блокируется для одного потока, выполняемого за раз. Однако, если вы смешиваете только C-расширения и ввод-вывод (например, операции PIL или numpy), и любой C-код может работать параллельно с одним активным потоком Python.

Python threading отлично подходит для создания гибкого графического интерфейса или для обработки нескольких коротких веб-запросов, где ввод-вывод является узким местом больше, чем код Python. Он не подходит для распараллеливания вычислительно интенсивного кода Python, придерживаться модуля multiprocessing для таких задач или делегировать выделенную внешнюю библиотеку.

29
задан Chandan Gupta 17 July 2013 в 05:32
поделиться

1 ответ

Вы можете использовать свойство length:

{% for n in range(yourList| length) %}
       <p class="someclass">{{n + 1}}.</p>
       <a class="someclass2" 
       href="{{ url_for( 'yourFunction', Int = yourList[n].iterable)}}">
       {{yourList[n].iterable}}</a><br>
{% endfor %}

Длина похожа на len (yourlist), который есть у нас в python.

1
ответ дан Dinidiniz 17 July 2013 в 05:32
поделиться
Другие вопросы по тегам:

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