如何在 asyncio python 中执行函数调用



我正在尝试通过asyncio调用一些函数。我正在按照本教程 http://www.giantflyingsaucer.com/blog/?p=5557 进行操作。它没有讨论如何调用其他函数。

import asyncio

    def print_myname():
        return ("My name is xyz")
    def print_myage():
        return ("My age is 21")

    @asyncio.coroutine
    def my_coroutine(future, task_name, function_call):
        print("Task name", task_name)
        data = yield from function_call
        #yield from asyncio.get_function_source(function_call)  #I was trying this too
        future.set_result(data)

    def got_result(future):
        return future.result()

    loop = asyncio.get_event_loop()
    future1 = asyncio.Future()
    future2 = asyncio.Future()
    tasks = [
        my_coroutine(future1, 'name', print_myname()),
        my_coroutine(future2, 'age', print_myage())]
    name = future1.add_done_callback(got_result)
    age = future2.add_done_callback(got_result)
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()
    print ("name output", name)
    print ("age output", age)

它会引发无法产生的运行时错误。

Task exception was never retrieved
    future: <Task finished coro=<my_coroutine() done, defined at /home/user/Desktop/testproject/source//weather/async_t.py:11> exception=RuntimeError("Task got bad yield: 'M'",)>
    Traceback (most recent call last):
        result = coro.throw(exc)
      File "/home/user/Desktop/testproject/source/weather/async_t.py", line 14, in my_coroutine
        data = yield from function_call
    RuntimeError: Task got bad yield: 'M'

通过异常,它似乎已转到函数,但无法执行代码。

要调用常规函数,只需调用它。 您不能yield from常规函数 - 仅从协程。

而不是:

data = yield from foo()

只需使用:

data = foo()

最新更新