(original) (raw)

Jumping in to correct one fact.

On Tue, May 5, 2015 at 12:44 PM, Brett Cannon <brett@python.org> wrote:

On Tue, May 5, 2015 at 3:14 PM Paul Moore <p.f.moore@gmail.com> wrote:
Well, twisted always had defer\_to\_thread. Asyncio has run\_in\_executor,
but that seems to be callback-based rather than coroutine-based?

Yep.

The run\_in\_executor call is not callback-based -- the confusion probably stems from the name of the function argument ('callback'). It actually returns a Future representing the result (or error) of an operation, where the operation is represented by the function argument. So if you have e.g. a function

def factorial(n):
return 1 if n <= 0 else n\*factorial(n-1)

you can run it in an executor from your async(io) code like this:

loop = asyncio.get\_event\_loop()
result = yield from loop.run\_in\_executor(factorial, 100)

(In a PEP 492 coroutine substitute await for yield from.)

--
--Guido van Rossum (python.org/\~guido)