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

How to execute a function call in 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'

通过exception好像是到了函数,但是无法执行代码

要调用常规函数,直接调用即可。您不能 yield from 常规函数 - 只能来自协程。

而不是:

data = yield from foo()

只需使用:

data = foo()