2015-01-18 1 views
0

У меня возникли проблемы с ясностью.Какие ограничения делает Python GIL многопоточным? (пример)

У меня есть программа, скажем, с тремя нитей - A, B и C.

C является «аппаратным менеджером», A и B выполняют свои задачи, используя APScheduler для планирования и в рамках своих процедур , запрашивать запросы менеджера оборудования.

Если я использую time.sleep() в потоке C (иногда необходимо дождаться завершения некоторых связанных с аппаратными средствами вещей), могут ли быть вызваны другие методы в потоке C?

например. «A» запрашивает «C», чтобы включить реле, которое поддерживает модем. Метод включает sleep(), поэтому, как только он вернется, «A» может ожидать, что сетевое соединение будет присутствовать. В это время, однако, «B» может запросить считывание напряжения батареи с АЦП. Должен ли я ожидать, что «B» застрянет в ожидании возврата первого вызова метода?

+0

Ваш вопрос не имеет ничего общего с GIL. Тема C спала, а не выполнялась. Вы также смешиваете темы и объекты здесь; является C потоком или аппаратным менеджером? Последний может использовать поток для выполнения работы, но они не одно и то же. –

+1

Что касается информации о GIL, см. [Поддерживает или не поддерживает Python многопоточность?] (Http://stackoverflow.com/q/20939299). 'time.sleep()' дает другие потоки. –

+0

Каждый из этих объектов (A, B и C) определяется как подкласс потоковой передачи. Thread - так что на самом деле C является одновременно. – BugSpray

ответ

0

ОК, так что, фактически, я думаю, что ответ заключается в том, что time.sleep() приведет к другим ожидающим потокам.

Возможно, другие ограничения или проблемы завоюют их головы вовремя, но на данном этапе производительность не является проблемой, а только параллелизмом.