Профили python раскрывают проблемы видимости памяти и переопределения операторов, как это делает Java? Поскольку я не могу найти ссылку на «модель памяти Python» или что-то в этом роде, несмотря на то, что многие люди пишут многопоточный код Python, я предполагаю, что этих ошибок нет здесь. Нет volatile ключевое слово, например. Но, похоже, это явно не указано нигде, что, например, изменение переменной в одном потоке сразу видно всем остальным потокам.python threading: модель памяти и видимость
Может быть, этот материал все очень очевидно для программистов Python, но робким Java программист, мне требуется немного больше уверенности :)
Даже в CPython доступ к словарю не является атомарным при любых обстоятельствах. Если функции хэша/сравнения ключей написаны на Python, GIL будет временно освобожден между кодами операций, когда эти функции выполняются. (Вероятно, вы уже знаете это, но я считаю, что стоит обратить внимание на других читателей) –
Спасибо! Я всю ночь узнал о GIL. Очевидно, что (C) программирование на Python будет включать другой способ взглянуть на потоки, чем я привык. @ Daniel Stutzbach: Я новичок в Python и не обратил бы внимания на этот факт. Спасибо. – philo
@philo, суммируя ситуацию многозадачности для CPython: потоки помогут вам, только если у вас есть ожидания ввода/вывода (которые вы можете делегировать потоку) или тяжелых операций, выполняемых в потоковом расширении Python (например, 'numpy '). Если ваша цель заключается в использовании нескольких ядер для Python-кодированных операций с привязкой к процессору, используйте 'multiprocessing' вместо' threading'. –