如何在 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()
我正在尝试通过 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()