파이썬 gevent.joinall이 모든 그린 렛을 실행하는 이유

Saveshodhan

다음 Python 코드가 있습니다.

>>> import gevent
>>> from gevent import monkey; monkey.patch_all()
>>>
>>> def fooFn(k):
...     return 'gevent_'+k
...
>>> threads = []
>>> threads.append(gevent.spawn(fooFn,'0'))
>>> threads.append(gevent.spawn(fooFn,'1'))
>>>
>>> gevent.joinall([threads[1]])
>>>
>>> print threads[1].value
gevent_1
>>> print threads[0].value
gevent_0
>>>

위에서 볼 수 있듯이 threads[0].value로부터 적절한 값을 얻었다 fooFn. 이것은 threads[0]그린 렛이 실행되었음을 의미합니다 .

내가 threads[1]그린 렛 만 전달했을 때 왜 이런 일이 발생 gevent.joinall했습니까?

실제로 전달 된 그린 렛 만 실행되도록하려면 gevent.joinall어떻게 해야 합니까?

악 샤트 마하 잔

전화를 걸면 즉시 그린 렛이 예약 됩니다 greenlet.spawn(). 즉,을 (를) 호출하면 즉시 생성되고 시작됩니다 spawn(). 이것이 첫 번째 그린 렛이 실행을 마친 이유입니다. 두 그린 렛이 스폰 된 순간부터 실행 중이었고, 그린 렛 1의 결과를 찾을 때까지 둘 다 실행이 완료되었습니다.

gevent.joinall()그린 렛을 실행하지 않습니다 spawn. 매개 변수로 전달 된 스레드가 실행을 마칠 때까지 기다리 도록 주 스레드 (실제로이를 편집 한 스레드)에게만 알립니다 . 호출하지 않으면 joinall그린 렛의 결과에 joinall()도달 하기 전에 메인 스레드가 종료되고 종료 될 위험이 있습니다. 그러면 누가 결과를 처리할까요?

여기에서 gevents원하는대로 작동하는지 확인하기 위해 변경해야하는 두 가지 작업을 수행했습니다 .

  • joinall()스크립트가 아닌 콘솔 REPL에서 호출 했습니다.

    여기서 메인 스레드 인 REPL 은 그린 렛이 반환되기 전에 끝나지 않는 것이 보장 됩니다. REPL exit()은 EOF 를 호출 하거나 표시 할 때만 종료되기 때문 입니다. 그러나 즉각적인 사용자 상호 작용이없는 스크립트에서는 그다지 사치스럽지 않습니다. 스크립트에 수행 할 작업이 없으면 실행이 종료됩니다. 그렇기 때문에 join()메인 스레드가 절대 종료되지 않고 부모가 돌아 가지 않도록 그린 렛을 남겨 두도록 호출합니다.

    joinall()콘솔 에서 호출 할 필요가 없습니다 (다음에 그린 렛에서 함수를 호출 할 때 그린 렛에서 결과를 얻을 수 있다는 보장을 원한다면, 좋은 생각입니다)

  • spawn()greenlet 2가 실행되지 않는 동안 greenlet 1 만 실행되도록 보장하려면 호출 하지 않아야합니다. 대신 문서가 말하는 내용을 읽으십시오 .

    새 greenlet을 시작하려면 대상 함수와 해당 인수를 Greenlet 생성자에 전달하고 start ()를 호출합니다.

    >>> g = Greenlet(myfunction, 'arg1', 'arg2', kwarg1=1)

    >>> g.start()

    또는 spawn()동일한 작업을 수행하는 바로 가기 인 classmethod 사용 하십시오.

    >>> g = Greenlet.spawn(myfunction, 'arg1', 'arg2', kwarg1=1)

start그린 렛이이 순간에 실행을 시작해야 함을 나타내는 데 사용 하는 것이 좋습니다. 따라서 두 개의 greenlet 개체를 만들고 그중 하나만 호출 start하여 해당 개체 만 실행하도록합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파이썬 프로그램을 실행할 때마다 모든 변수 제거

분류에서Dev

작업이 완료 될 때까지 Gevent 대기 (joinall 대 대기)

분류에서Dev

배열과 그림을 만드는 파이썬 스크립트를 실행하는 메모리 문제

분류에서Dev

파이썬을 사용하여 모든 html 태그를 기호로 변경

분류에서Dev

파이썬에서 모든 유니 코드 표현을 제거하는 방법

분류에서Dev

실행 중 파이썬 프로그램을 업데이트하는 방법

분류에서Dev

파이썬 프로그램을 실행 파일로 공유하는 방법은 무엇입니까?

분류에서Dev

rsync가 모든 파일을 실행하지만 복사하지 못하는 이유는 무엇입니까?

분류에서Dev

모든 것을 추가하는 파이썬 루프

분류에서Dev

파이썬-<> 안의 모든 것을 무시하는 정규식

분류에서Dev

파이 게임을 사용하여 파이썬에서 비를 내리려고하는데 코드가 실행될 때 모든 방울이 멈 춥니 다.

분류에서Dev

파이썬 프로그램을 데몬으로 실행하는 방법?

분류에서Dev

파이썬 프로그램에서 날짜 명령을 실행하는 방법

분류에서Dev

C ++에서 파이썬 프로그램을 실행하는 방법

분류에서Dev

SQL 쿼리가 모든 행을 방문하고 매우 느린 이유

분류에서Dev

for 루프의 모든 출력을 행렬 파이썬에 저장

분류에서Dev

모든 값이 조건을 충족하는 그룹 만 유지

분류에서Dev

파이썬 프로그램이 동전 던지기의 모든 조합을 인쇄하도록하십시오

분류에서Dev

파이썬 입력의 모든 줄을 읽는 방법

분류에서Dev

파이썬에서 모든 열의 데이터 유형을 변경하는 방법

분류에서Dev

파이썬 입력에서 모든 데이터 유형을 확인하는 방법은 무엇입니까?

분류에서Dev

파이썬을 사용하여 XML의 모든 태그를 얻는 방법은 무엇입니까?

분류에서Dev

한 번에 모든 파이썬 모듈을 설치하는 방법

분류에서Dev

배치 스크립트가 모든 행을 실행하지 않는 이유는 무엇입니까?

분류에서Dev

배치 스크립트가 모든 행을 실행하지 않는 이유는 무엇입니까?

분류에서Dev

파이썬에서 모든 파일 유형을 선택하는 또 다른 방법

분류에서Dev

gevent-값을 여러 그린 렛에 병렬로 전달

분류에서Dev

파이썬 코드로 폴더의 모든 파일을 처리하는 방법

분류에서Dev

다른 파이썬 파일이 실행되는 파이썬 파일을 실행하는 실행 파일을 만드는 방법이 있습니까?

Related 관련 기사

  1. 1

    파이썬 프로그램을 실행할 때마다 모든 변수 제거

  2. 2

    작업이 완료 될 때까지 Gevent 대기 (joinall 대 대기)

  3. 3

    배열과 그림을 만드는 파이썬 스크립트를 실행하는 메모리 문제

  4. 4

    파이썬을 사용하여 모든 html 태그를 기호로 변경

  5. 5

    파이썬에서 모든 유니 코드 표현을 제거하는 방법

  6. 6

    실행 중 파이썬 프로그램을 업데이트하는 방법

  7. 7

    파이썬 프로그램을 실행 파일로 공유하는 방법은 무엇입니까?

  8. 8

    rsync가 모든 파일을 실행하지만 복사하지 못하는 이유는 무엇입니까?

  9. 9

    모든 것을 추가하는 파이썬 루프

  10. 10

    파이썬-<> 안의 모든 것을 무시하는 정규식

  11. 11

    파이 게임을 사용하여 파이썬에서 비를 내리려고하는데 코드가 실행될 때 모든 방울이 멈 춥니 다.

  12. 12

    파이썬 프로그램을 데몬으로 실행하는 방법?

  13. 13

    파이썬 프로그램에서 날짜 명령을 실행하는 방법

  14. 14

    C ++에서 파이썬 프로그램을 실행하는 방법

  15. 15

    SQL 쿼리가 모든 행을 방문하고 매우 느린 이유

  16. 16

    for 루프의 모든 출력을 행렬 파이썬에 저장

  17. 17

    모든 값이 조건을 충족하는 그룹 만 유지

  18. 18

    파이썬 프로그램이 동전 던지기의 모든 조합을 인쇄하도록하십시오

  19. 19

    파이썬 입력의 모든 줄을 읽는 방법

  20. 20

    파이썬에서 모든 열의 데이터 유형을 변경하는 방법

  21. 21

    파이썬 입력에서 모든 데이터 유형을 확인하는 방법은 무엇입니까?

  22. 22

    파이썬을 사용하여 XML의 모든 태그를 얻는 방법은 무엇입니까?

  23. 23

    한 번에 모든 파이썬 모듈을 설치하는 방법

  24. 24

    배치 스크립트가 모든 행을 실행하지 않는 이유는 무엇입니까?

  25. 25

    배치 스크립트가 모든 행을 실행하지 않는 이유는 무엇입니까?

  26. 26

    파이썬에서 모든 파일 유형을 선택하는 또 다른 방법

  27. 27

    gevent-값을 여러 그린 렛에 병렬로 전달

  28. 28

    파이썬 코드로 폴더의 모든 파일을 처리하는 방법

  29. 29

    다른 파이썬 파일이 실행되는 파이썬 파일을 실행하는 실행 파일을 만드는 방법이 있습니까?

뜨겁다태그

보관