Как работает threading. Thread дает остаток своего кванта в Python? - PullRequest
40 голосов
/ 25 апреля 2009

У меня есть нить, опрашивающая аппаратное обеспечение.

while not hardware_is_ready():
    pass
process_data_from_hardware()

Но есть и другие потоки (и процессы!), Которые могут чем-то заняться. Если так, я не хочу сжигать процессор, проверяя аппаратную часть каждой другой инструкции. Прошло много времени с тех пор, как я занимался многопоточностью, и когда я это делал, это был не Python, но я считаю, что большинство многопоточных библиотек имеют функцию yield или что-то, что позволяет потоку сообщать планировщику: «Дайте другим потокам шанс. "

while not hardware_is_ready():
    threading.yield()          # This function doesn't exist.
process_data_from_hardware()

Но я не могу найти ссылки на что-то подобное в документации по потокам. В Python есть оператор yield, но я уверен, что это что-то совершенно другое (связано с генераторами).

Что здесь делать правильно?

Ответы [ 3 ]

67 голосов
/ 26 апреля 2009

time.sleep(0) достаточно для контроля урожайности - нет необходимости использовать положительный эпсилон. Действительно, time.sleep(0) ОЗНАКОМЛЯЕТ "уступать любому другому потоку, который может быть готов".

12 голосов
/ 25 апреля 2009

Читайте о Глобальной Блокировке Интерпретатора (GIL).

Например: http://jessenoller.com/2009/02/01/python-threads-and-the-global-interpreter-lock/

Также: http://www.pyzine.com/Issue001/Section_Articles/article_ThreadingGlobalInterpreter.html

Сделайте это в своем коде, если вы должны сделать Ожидание занятости (например, опрос устройства).

time.sleep( 0.0001 )

Это приведет к планировщику потоков.

Кроме того, я собрал некоторые заметки и ссылки в http://homepage.mac.com/s_lott/iblog/architecture/C551260341/E20081031204203/index.html

3 голосов
/ 25 апреля 2009

Если вы делаете это на * nix, вам может пригодиться библиотека select . Камаэла также содержит несколько компонентов, которые могут оказаться полезными, но для этого может потребоваться небольшое изменение парадигмы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...