2012-05-13 4 views
16

Я начал изучать python пару месяцев назад, затем нашел Jython.jython multithreading

Действительно ли потоки работают правильно в Jython, так как это doesn't have a GIL? Если да, можете ли вы предложить хорошую книгу о параллелизме (threading)?

+3

Это хороший вопрос, я честно не знаю ответа, но у меня многопоточность с обоими, поэтому, возможно, лучший вопрос: «Нужно ли использовать многопроцессор python или потоки Java»? Я уверен, что он просто не уверен, какой из них вам нужно использовать, поскольку jython - это смесь обоих. – Lostsoul

+0

Вы имеете в виду Jpython, или Jython? Это тип открытого вопроса, который не очень подходит для SO, кстати. –

+0

Согласно [этому вопросу (http://stackoverflow.com/questions/4227269/hidden-multithreading-bottlenecks-in-jython), ответ да. Я понимаю, что можно получить доступ к библиотекам многопоточности python или к поддержке java-параллелизма через jython. –

ответ

5

Лучшая книга, с которой я столкнулась при многопоточности, - «Java Concurrency in Practice». Он очень концентрируется на параллелизме потоков Java и одновременно смиряется и увлекается, когда вы начинаете понимать проблемы и возможности, возникающие в результате параллелизма. Копия, которую я купил несколько лет назад, имела некоторые ошибки в кодировании, хотя, что усугубляло уже вызывающий мозг предмет: проверьте здесь ошибку: http://jcip.net/errata.html.

Хотя он предназначен для разработчиков Java, желающих перейти на параллелизм (который, кстати, включает всех, кто когда-либо использовал интерфейс GUI любого типа), я уверен, что технические трудности и тонкости, изложенные в книге, применимы к любой реализации параллелизм.

Кстати, я также люблю Jython и могу подтвердить, что все, что вы можете сделать в Java, что вы можете сделать в Java, вы, по-видимому, можете сделать в Jython. Однако есть предостережение: параллелизм может быть для асинхронного программирования (включая графический интерфейс) и/или для производительности. Если для последнего у вас есть проблема, на мой взгляд: Jython по моему опыту работает примерно на 10 x медленнее, чем эквивалентная Java-программа.

Это означает, что вашим более требовательным модулям Jython придется вызывать что-то другое, кроме Jython, для задач с хрустом числа. В то же время, Jython до сих пор * не имел многопроцессорного модуля Python, поэтому межпроцессные коммуникации отсутствуют, если вы не отправитесь в ужасную территорию RMI. Ты больше мужчина или женщина, чем я, если ты примешь этот вариант. Но все в порядке: см. «Окончательное руководство по Jython» на странице http://www.jython.org ... глава 19 - это своего рода введение в контекст, чтобы остановить параллельность, а глава 10 посвящена интеграции Java и Jython (подсказка: это абсурдно легко).

  • интересный: быстрый взгляд на сайт Jython показывает, что всего 10 дней назад, 17/05/12, версия 2.7a1 была выпущена ... релиз «Alpha». Это должно содержать модуль многопроцессорности, входящий в состав Python 2.6. Wd будет интересно проверить это: если это так, то это, по-видимому, дает вам захватывающий вариант связывания процессов Jython и CPython (обновление позже: к сожалению, на данный момент это выглядит так, что имя модуля «многопроцессорность» не было распознано, когда я пытался) ...

PS последнее слово: большинство экспертов, которые знают намного больше об этих вещах, чем я говорю, что закон Мура быть заменен в importtance законом Амдаля, который в короткие означает, что сложная задача программирования стабильной и масштабируемые истинные параллельные программы будут неизбежны в будущем. Точно, насколько легко может быть реализовано параллельное параллельное использование (т. Е. Поток) с использованием умных инструментов анализа кода, которые я не могу сказать, но инвестиции в эту тему и увлекательные, интеллектуальные новые дисциплины рассуждений, налагаемые параллелизмом, вероятно, окупится ... если вам нравится вызов.

3

Да, с Jython у вас есть real multi-threading. Jython (преемник JPython) - это реализация Python, которая работает в JVM. Одно из главных отличий между Jython и оригинальным проектом заключается в том, что первое не имеет GIL и реализует реальную поддержку многопоточности, основанную на реализации JVM.

Я предлагаю вам ознакомиться с этим book и OReilly's.

0

Первоначально запутанный аспект может заключаться в том, что механизмы параллелизма Java и Jython связаны с you can mix and match. Но все это работает.Причины таковы:

  • Under Jathon - это та же самая старая Java. Все его надежные механизмы резьбы и структуры данных не будут разрушаться даже под тяжелым оборудованием Jython.
  • В потоках Jython используются потоки Java в качестве их шасси и добавлена ​​надстройка, чтобы заставить их говорить API-интерфейс потоков Python. (Нет лучшего способа упростить перенос потокового кода Python.) Но суть двух типов потоков аналогична. Кроме того, что с потоками Jython

    ... нет приоритетов, ни потоковые группы, ни потоки не могут быть уничтожены, остановлены, приостановлены, возобновлены или прерваны. [1]

питон идиомы, вероятно, немного более удобно, потому что, например, если вы хотите сделать эквивалент synchronized (some_object) { ... }, есть a small bit of fiddling required, который, вероятно, будет менее читаемым, чем при использовании RLock ,