Если вы хотите, чтобы изменения были автоматическими, вы можете добавить эти две строки в файл axes.py matplotlib: Посмотрите на эту строку:
self.color_cycle = itertools.cycle(clist)
и добавьте следующую строку внизу:
self.line_cycle = itertools.cycle(["-",":","--","-.",])
И найдите строку:
kw['color'] = self.color_cycle.next()
и добавьте строку:
kw['linestyle'] = self.line_cycle.next()
Думаю, вы можете сделать то же самое для маркера.
Единственная причина, почему я не использовал бы ThreadPool
для дешевой многопоточности, состоит в том, если мне нужен to…
ThreadPool
, потоки являются фоновыми потоками) P.S.: статья MSDN "Управляемый Пул потоков" содержит названный раздел, "Если не для Использования Потоков Пула потоков" , с очень похожим, но немного большим количеством полного списка возможных причин для того, чтобы не использовать пул потоков.
существует много причин, почему необходимо было бы пропустить эти ThreadPool
, но если Вы не знаете их тогда эти ThreadPool
, должно быть достаточно хорошим для Вас.
, С другой стороны, смотрят на новое Параллельная Платформа Расширений , который имеет некоторый аккуратный материал там, который может удовлетворить Вашим потребностям, не имея необходимость использовать ThreadPool
.
Пулы потоков имеют смысл каждый раз, когда у Вас есть понятие рабочих потоков. Любое время можно легко разделить обработку в меньшие задания, каждое из которых может быть обработано независимо, рабочие потоки (и поэтому пул потоков) имеет смысл.
Пулы потоков не имеют смысла, когда Вы должны распараллелить, которые выполняют совершенно отличающиеся и несвязанные действия, которые нельзя считать "заданиями"; например, Один поток для обработки событий GUI, другой для обработки бэкенда. Пулы потоков также не имеют смысла при обработке форм конвейер.
В основном, если у Вас есть потоки, которые запускаются, обработайте задание и выйдите, пул потоков является, вероятно, способом пойти. Иначе пул потоков действительно не собирается помогать.
К ответу quarrelsome я добавил бы, что лучше не использовать поток ThreadPool, если необходимо гарантировать, что поток сразу начнет работу. Максимальное количество выполнения объединенных потоком потоков ограничено на appdomain, таким образом, Вашей обрабатываемой детали, вероятно, придется ожидать, если они все заняты. Это называют "пользовательским объектом работы очереди", в конце концов.
Два протеста, конечно:
я не говорю как кто-то только с теоретическими знаниями здесь. Я пишу и поддерживаю крупномасштабные приложения, которые делают интенсивное использование из многопоточности, и я обычно не нахожу, что пул потоков корректный ответ.
А-ч, аргумент от полномочий - но всегда быть в поисках людей, которые могли бы быть в команде ядра Windows.
Ни один из нас не спорил с тем, что, если у Вас есть некоторые конкретные требования тогда.NET, ThreadPool не мог бы быть правильной вещью. То, против чего мы возражаем, является опошлением затрат для машины создания потока.
значительный расход создания потока в смысле существования для ThreadPool во-первых. Я не хочу, чтобы мои машины были заполнены кодом, записанным людьми, которые были дезинформированы о расходе создания потока и, например, не знают, что это заставляет метод быть названным в каждом DLL, который присоединен к процессу (некоторые из которых будут созданы третьими сторонами), и который может хорошо горячий загрузка кода, который не должен быть в RAM вообще и почти наверняка не должен был быть в L1.
форма иерархии памяти в современной машине означает, что 'отвлечение' ЦП о худшей вещи, которую можно возможно сделать, и все, кто заботится об их ремесле, должен упорно работать для предотвращения его.
Когда Вы собираетесь выполнить операцию, которая собирается занять много времени, или возможно непрерывный фоновый поток. Я предполагаю, что Вы могли всегда продвигать сумму потоков, доступных в пуле, но будет мало точки в несении затрат управления на поток, который никогда не будет отданным к пулу.
@Eric, я оказываюсь перед необходимостью соглашаться с Деканом. Потоки являются дорогими. Вы не можете предположить, что Ваша программа является единственным выполнением. Когда все являются жадными с ресурсами, проблема умножается.
я предпочитаю создавать свои потоки вручную и управлять ими сам. Это сохраняет код очень легким понять.
Это прекрасно, когда это является соответствующим. При необходимости в наборе рабочих потоков, тем не менее, все, что Вы сделали, делают Ваш код более сложным. Теперь необходимо записать код для управления ими. Если бы Вы просто использовали пул потоков, Вы получили бы все управление потоком бесплатно. И пул потоков, обеспеченный языком, очень вероятно, будет более устойчивым, более эффективным, и меньше багги, чем, что Вы прокручиваете для себя.
Thread t = new Thread(new ThreadStart(DoSomething)); t.Start(); t.Join();
я надеюсь, что у Вас обычно был бы некоторый дополнительный код промежуточным Start()
и Join()
. Иначе дополнительный поток бесполезен, и Вы тратите впустую ресурсы ни по какой причине.
Люди слишком боятся ресурсов, используемых потоками. Я никогда не видел создание и запуск потока для взятия больше, чем миллисекунда. Нет никакого жесткого предела количества потоков, которые можно создать. Использование оперативной памяти минимально. Как только у Вас есть несколько сотен потоков, ЦП становится проблемой из-за контекстных переключений, таким образом, в той точке Вы могли бы хотеть стать необычными со своим дизайном.
миллисекунда А длинна время на современных аппаратных средствах. Это - 3 миллиона циклов на машине на 3 ГГц. И снова, Вы не единственный, создающий потоки. Ваши потоки конкурируют за ЦП наряду с потоками любой программы. Если Вы используете потоки not-quite-too-many, и также - другая программа, то вместе Вы использовали слишком много потоков.
Серьезно, не делайте жизнь более сложной, чем это должно быть. Не используйте пул потоков, если Вам не нужно что-то очень определенное, которое он предлагает.
Действительно. Не делайте жизнь более сложной. Если для Вашей программы нужны несколько рабочих потоков, не перестраивайте колесо. Используйте пул потоков. Вот почему это там. Строковый класс самокрутки?
@Eric
@Derek, я точно не соглашаюсь со сценарием, который Вы используете в качестве примера. Если Вы не знаете точно, что работает на Вашей машине и точно сколько общего количества потоки, дескрипторы, процессорное время, RAM, и т.д., который Ваше приложение будет использовать под определенным количеством загрузки, Вы в беде.
действительно ли Вы - единственный целевой клиент для программ, которые Вы пишете? В противном случае Вы не можете быть уверены в большей части из этого. Вы обычно понятия не имеете, когда Вы пишете программу, выполнит ли она эффективно соло, или если она будет работать на веб-сервере, ковавшем DDos-атакой. Вы не можете знать, сколько процессорного времени Вы собираетесь иметь.
Принятие поведения Вашей программы изменяется на основе входа, редко даже знать точно, сколько памяти или процессорное время Ваша программа использует. Несомненно, у Вас должна быть довольно хорошая идея о том, как Ваша программа собирается вести себя, но большинство программ никогда не анализируется для определения точно, сколько памяти, сколько дескрипторов, и т.д. будет использоваться, потому что полный анализ является дорогим. Если Вы не пишете программное обеспечение реального времени, выплата не стоит усилия.
В целом, утверждая знать точно то, как Ваша программа будет вести себя, неправдоподобно, и утверждающий знать все о смехотворных подходах машины.
И честно говоря, если Вы не знаете точно, какой метод необходимо использовать: ручные потоки, пул потоков, делегаты, и как реализовать его, чтобы сделать, в чем нужно Ваше приложение, Вы в беде.
я не полностью не соглашаюсь, но я действительно не вижу, как это релевантно. Этот сайт здесь конкретно, потому что у программистов не всегда есть все ответы.
, Если Ваше приложение комплекса достаточно для требования регулировки количества потоков, которые Вы используете, не Вы почти всегда собирающийся хотеть больше управления, чем, что платформа дает Вам?
номер, если мне нужен пул потоков, я буду использовать тот, который это обеспечивается, только после того как я нахожу, что это не достаточно. Я просто не предположу, что обеспеченный пул потоков недостаточен для моих потребностей, не подтверждая это для имения место.
я не говорю как кто-то только с теоретическими знаниями здесь. Я пишу и поддерживаю крупномасштабные приложения, которые делают интенсивное использование из многопоточности, и я обычно не нахожу, что пул потоков корректный ответ.
большая часть моего профессионального опыта была с многопоточностью и многопроцессорными программами. Я должен был часто прокручивать свое собственное решение также. Это не означает, что пул потоков не является полезным, или соответствующим во многих случаях. Пул потоков создается для обработки рабочих потоков. В случаях, где несколько рабочих потоков являются соответствующими, должен обеспеченный пул потоков, должен обычно быть первый подход.