У меня возникли проблемы с ясностью.Какие ограничения делает Python GIL многопоточным? (пример)
У меня есть программа, скажем, с тремя нитей - A, B и C.
C является «аппаратным менеджером», A и B выполняют свои задачи, используя APScheduler для планирования и в рамках своих процедур , запрашивать запросы менеджера оборудования.
Если я использую time.sleep() в потоке C (иногда необходимо дождаться завершения некоторых связанных с аппаратными средствами вещей), могут ли быть вызваны другие методы в потоке C?
например. «A» запрашивает «C», чтобы включить реле, которое поддерживает модем. Метод включает sleep(), поэтому, как только он вернется, «A» может ожидать, что сетевое соединение будет присутствовать. В это время, однако, «B» может запросить считывание напряжения батареи с АЦП. Должен ли я ожидать, что «B» застрянет в ожидании возврата первого вызова метода?
Ваш вопрос не имеет ничего общего с GIL. Тема C спала, а не выполнялась. Вы также смешиваете темы и объекты здесь; является C потоком или аппаратным менеджером? Последний может использовать поток для выполнения работы, но они не одно и то же. –
Что касается информации о GIL, см. [Поддерживает или не поддерживает Python многопоточность?] (Http://stackoverflow.com/q/20939299). 'time.sleep()' дает другие потоки. –
Каждый из этих объектов (A, B и C) определяется как подкласс потоковой передачи. Thread - так что на самом деле C является одновременно. – BugSpray