나는 미래를 돌려 보내는 기능이 있습니다. 미래에 완성 될 때까지 대기하는 함수에 데코레이터를 작성한 다음 비동기 함수를 blocking 함수로 변환하는 결과를 반환하고 싶습니다.이 함수는 내 REST API에서 사용할 것입니다. 그렇게 할 수있는 방법이 있습니까?토네이도 미래가 끝날 때까지 기다리십시오
답변
미래를 해결하려면 yield
해야합니다. 이런 식으로 뭔가를 작동 할 수 있습니다 :
from tornado import gen
def blocking(func):
def new_func(*args, **kwargs):
result = yield func(*args, **kwargs)
return result
return gen.coroutine(new_func)
Python 버전 <3.3. 생성자 내부의 인수로 '반환'을 허용하지 않습니다. –
def sync(fn):
def wrapped(*args, **kwargs):
return IOLoop.instance().run_sync(lambda: fn(*args, **kwargs))
return wrapped
@gen.coroutine
def my_coro():
# ...
sync_fn = sync(my_coro)
result = sync_fn()
'fn' 자체가'@sync'로 꾸며진 다른 함수를 호출 할 때 오류가 발생합니다.'RuntimeError : Ioloop is already '해결 방법을 알려주시겠습니까? – freeza
이 시점에서 나는 당신이 옳은 문제를 해결하고 있는지 심각하게 고려해야한다고 생각합니다. 코드를 비동기로 만들지 않으려면 왜 coroutines로 작성해야합니까? 비동기로 만들고 싶다면 왜이 데코레이터를 사용하고 싶습니까? –
aync 라이브러리 (대안 없음)를 사용하고 있지만 내 코드를 REST API에 동기화하고 싶습니다. – freeza
- 1. 액터가 끝날 때까지 기다리십시오()
- 2. SwingWorker가 끝날 때까지 기다리십시오.
- 3. 다트 : 템플릿이 끝날 때까지 기다리십시오.
- 4. dispatch_async 스레드가 끝날 때까지 기다리십시오.
- 5. 모든 약속이 끝날 때까지 기다리십시오.
- 6. Android 애니메이션이 끝날 때까지 기다리십시오.
- 7. 비동기 작업이 끝날 때까지 기다리십시오.
- 8. 마멀레이드 퀵 : 애니메이션이 끝날 때까지 기다리십시오.
- 9. Bash에서 명령이 완전히 끝날 때까지 기다리십시오.
- 10. 복사가 끝날 때까지 bash 스크립트를 기다리십시오.
- 11. 비 활동 클래스에서 활동이 끝날 때까지 기다리십시오.
- 12. 활동을 계속하기 전에 의도가 끝날 때까지 기다리십시오.
- 13. submit 유형의 WebButton에서 'Click'이 완전히 끝날 때까지 기다리십시오.
- 14. 다른 애니메이션을 실행하기 전에 호버 애니메이션이 끝날 때까지 기다리십시오.
- 15. 모든 작업 (알 수없는 번호)이 끝날 때까지 기다리십시오. ThreadPoolExecutor
- 16. 마지막으로 생성 된 프로세스 (포크가있는 데몬)가 끝날 때까지 기다리십시오.
- 17. AngularJS에서 결과를 출력하기 위해 $ http가 끝날 때까지 기다리십시오.
- 18. Android/Java - 다음 기능을 수행하기 전에 AsyncTask가 끝날 때까지 기다리십시오.
- 19. 이미지가로드되지 않을 때까지 기다리십시오.
- 20. 텍스트가 나타날 때까지 기다리십시오.
- 21. 키보드가 숨길 때까지 기다리십시오.
- 22. 로드 할 때까지 기다리십시오.
- 23. 스레드가 Java에서 완료 될 때까지 기다리십시오.
- 24. WMIC에서 원격 통화를 마칠 때까지 기다리십시오.
- 25. 애니메이션이 유니티 3d로 완료 될 때까지 기다리십시오.
- 26. 이벤트가 끝날 때까지 기다림
- 27. 애니메이션이 끝날 때까지 기다렸다가
- 28. 슬라이드 쇼가 끝날 때까지
- 29. Textscan이 끝날 때까지
- 30. foreach가 끝날 때까지 기다려주십시오
['run_sync'] (http://www.tornadoweb.org/en/stable/ioloop.html?highlight=run_sync#tornado.ioloop.IOLoop.run_sync)? – jonrsharpe
더 나은 답변을 얻으려면 함수 코드를 게시하십시오. –