Примечание. В последних версиях matplotlib (> = 1.5) _get_lines
изменилось. Теперь вам нужно использовать next(ax._get_lines.prop_cycler)['color']
в Python 2 или 3 (или ax._get_lines.prop_cycler.next()['color']
в Python 2 ), чтобы получить следующий цвет из цветового цикла.
По возможности используйте более прямой подход, показанный в нижней части ответа @ joe-kington. Поскольку _get_lines
не обращен к API, в будущем он может снова измениться в обратном порядке.
Да, добавление и удаление элементов из List <>
не является потокобезопасным, поэтому вам необходимо синхронизировать доступ, например, с помощью блокировки
.
Помните, что ключевое слово lock
никоим образом не блокирует объект, который вы используете в качестве идентификатора, оно только предотвращает одновременный ввод двух потоков в один и тот же блок кода. Вам потребуется заблокировать весь код, который обращается к списку, используя тот же объект в качестве идентификатора.
Использование блокировки для определенного кода делает его потокобезопасным, но я не согласен с этим для текущего сценария.
Вы можете реализовать метод Synchronized, чтобы сделать сборку потокобезопасной. Эта ссылка объясняет, почему и как это сделать.
Другой чисто программный подход упоминается в этой ссылке , хотя я никогда не тестировал его собственноручно, но он должен работать.
Кстати, одна из самых серьезных проблем заключается в том, пытаетесь ли вы поддерживать что-то вроде пул подключений самостоятельно? если да, то почему?
Я беру свой ответ. Использование блокировок лучше, чем использование этого метода.
List
не является потоком -safe, так что да, вам нужно будет контролировать доступ к списку с помощью блокировки. Если у вас есть несколько потоков, обращающихся к списку, убедитесь, что все они соблюдают блокировку, иначе у вас возникнут проблемы. Наилучший способ сделать это - создать подкласс List, чтобы блокировка происходила автоматически, иначе вы, скорее всего, рано или поздно забудете.
На самом деле, иногда List <> является потокобезопасным, а иногда нет, согласно Microsoft :
Открытые статические члены этого типа потокобезопасный. Любые члены экземпляра не гарантируется потокобезопасность.
но на этой странице говорится:
Перечисление через коллекцию по сути не является потокобезопасным процедура. В том редком случае, когда перечисление соперничает с одним или несколькими доступ на запись, единственный способ гарантировать безопасность потока заключается в блокировке сбор в течение всего перечисление. Разрешить сбор доступ к нескольким потокам для чтение и письмо, вы должны реализовать собственную синхронизацию.