add_done_callback
メソッドは、最近配布されたFuture
オブジェクトに追加されました。これにより、成功したかどうかにかかわらず、後で何らかのアクションを取ることができます。あなたが直接渡さ将来のオブジェクトのメソッドresult
、exception
またはtraceback
のいずれかを呼び出そうと将来のコールバックの結果を得るには?
コールバック関数がハングします。次のように
例外とトレースバックしかしコールバックにアクセスすることができる。 結果と同じパターンを試しfut._exception().result()
fut._traceback().result()
- すなわちfut._result().result()
は、例外が発生:
File "C:\Python\lib\site-packages\tornado\concurrent.py", line 316, in _check_done
raise Exception("DummyFuture does not support blocking for results")
Exception: DummyFuture does not support blocking for results
できずコールバックの将来の結果にアクセスするには、コールバックを追加できることが私には限られています。
私は何かを逃しています - はコールバックの将来の結果を得る方法がありますか?
直接result
メソッドにアクセスすることは可能である例与えるようasyncioのドキュメントで
:
...私は、これは、分散/竜巻に関連するかどうかはわかりませんが、それを非常に同じことをすることができるようになるでしょう。
from distributed import Client
client = Client("127.0.0.1:8786")
def f(delay):
from time import sleep
from numpy.random import randn
sleep(delay)
if randn() > 1:
1/0
return delay
def callback(fut):
import logging
logger = logging.getLogger('distributed')
if fut.status == 'finished':
res = future._result().result() # <-------------- Doesn't work!
logger.info("{!r} - {!s}".format(fut, res))
else:
logger.info("{!r} - {!s}".format(fut, fut.status))
args = rand(10)
futs = client.map(f, args)
for fut in futs:
fut.add_done_callback(callback)