복붙노트

[PYTHON] threading.Thread는 파이썬에서 나머지 퀀텀을 어떻게 얻을 수 있습니까?

PYTHON

threading.Thread는 파이썬에서 나머지 퀀텀을 어떻게 얻을 수 있습니까?

하드웨어를 폴링하는 스레드가 있습니다.

while not hardware_is_ready():
    pass
process_data_from_hardware()

그러나 할 일이있는 다른 스레드 (및 프로세스!)가 있습니다. 그렇다면, 나는 다른 모든 명령어의 하드웨어를 검사하는 CPU를 태우고 싶지 않습니다. 스레딩을 다루었으므로 오랜 시간이 걸렸지 만, 파이썬이 아니기 때문에 대부분의 스레딩 라이브러리에는 yield 함수가 있거나 스레드가 스케줄러에게 "다른 스레드에 기회를 주어야합니다."라고 믿습니다. "

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

하지만 스레딩 설명서에서 이와 같은 내용을 찾을 수 없습니다. 파이썬은 항복 선언문을 가지고 있지만 꽤 확실합니다 (발전기와 관련이 있습니다).

여기에서 옳은 것은 무엇입니까?

해결법

  1. ==============================

    1.time.sleep (0)은 제어를내는 데 충분합니다. 양의 엡실론을 사용할 필요가 없습니다. 실제로, time.sleep (0)은 "다른 스레드가 준비 될 수있는 것이면 무엇이든"을 의미합니다.

    time.sleep (0)은 제어를내는 데 충분합니다. 양의 엡실론을 사용할 필요가 없습니다. 실제로, time.sleep (0)은 "다른 스레드가 준비 될 수있는 것이면 무엇이든"을 의미합니다.

  2. ==============================

    2.GIL (Global Interpreter Lock)을 읽으십시오.

    GIL (Global Interpreter Lock)을 읽으십시오.

    예 : 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. ==============================

    3.* nix에서이 작업을 수행하는 경우 선택 라이브러리가 유용 할 수 있습니다. Kamaela도 유용 할 수있는 몇 가지 구성 요소가 있지만 패러다임 변화가 약간 필요할 수 있습니다.

    * nix에서이 작업을 수행하는 경우 선택 라이브러리가 유용 할 수 있습니다. Kamaela도 유용 할 수있는 몇 가지 구성 요소가 있지만 패러다임 변화가 약간 필요할 수 있습니다.

  4. from https://stackoverflow.com/questions/787803/how-does-a-threading-thread-yield-the-rest-of-its-quantum-in-python by cc-by-sa and MIT license