Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-Asyncio-将参数列表传递给用定义的函数* 让我们从文档中考虑下面的例子: import asyncio async def factorial(name, number): f = 1 for i in range(2, number+1): print("Task %s: Compute factorial(%s)..." % (name, i)) await asyncio.sleep(1) f *= i print("Task %s: factorial(%s) = %s" % (name, number, f)) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather( factorial("A", 2), factorial("B", 3), factorial("C", 4), )) loop.close()_Python_Python Asyncio - Fatal编程技术网

Python-Asyncio-将参数列表传递给用定义的函数* 让我们从文档中考虑下面的例子: import asyncio async def factorial(name, number): f = 1 for i in range(2, number+1): print("Task %s: Compute factorial(%s)..." % (name, i)) await asyncio.sleep(1) f *= i print("Task %s: factorial(%s) = %s" % (name, number, f)) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather( factorial("A", 2), factorial("B", 3), factorial("C", 4), )) loop.close()

Python-Asyncio-将参数列表传递给用定义的函数* 让我们从文档中考虑下面的例子: import asyncio async def factorial(name, number): f = 1 for i in range(2, number+1): print("Task %s: Compute factorial(%s)..." % (name, i)) await asyncio.sleep(1) f *= i print("Task %s: factorial(%s) = %s" % (name, number, f)) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather( factorial("A", 2), factorial("B", 3), factorial("C", 4), )) loop.close(),python,python-asyncio,Python,Python Asyncio,聚集功能在模块中显示如下: asyncio.gather(*coros_or_futures, loop=None, return_exceptions=False) 它工作得很好,但是对于我的实际问题,我需要传递的不是带有硬编码参数的多个函数,而是创建多个函数的某种形式的元组理解 我试过: loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.gather( [factorial(str(g),g) for g

聚集功能在模块中显示如下:

asyncio.gather(*coros_or_futures, loop=None, return_exceptions=False)
它工作得很好,但是对于我的实际问题,我需要传递的不是带有硬编码参数的多个函数,而是创建多个函数的某种形式的元组理解

我试过:

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(
    [factorial(str(g),g) for g in range(3)]
))
loop.close()
但它不起作用。有人知道如何使用这个聚集函数来处理通过编程创建的函数列表吗

需要明确的是:
gather
函数不是我定义的,所以我不能从它的定义中删除*并简单地传递这样的参数列表。我需要“解包”列表,但我不知道如何解包。

找到了解决方案:

loop.run_until_complete(asyncio.gather(*(factorial(str(g),g) for g in range(3)))

您还可以使用
itertools.starmap
执行此任务:

import asyncio
import itertools

async def factorial(name, number):
    f = 1
    for i in range(2, number+1):
        print("Task %s: Compute factorial(%s)..." % (name, i))
        await asyncio.sleep(1)
        f *= i
    print("Task %s: factorial(%s) = %s" % (name, number, f))

loop = asyncio.get_event_loop()

args = [(str(g), g) for g in range(3)]
tasks = itertools.starmap(factorial, args)
loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
制作一个迭代器,使用从iterable获得的参数计算函数。当参数参数已从单个iterable(数据已“预压缩”)分组到元组中时,用于代替map()


更多阅读:

可以动态生成和传递协同程序列表,如下所示:

import asyncio

async def factorial(name, number):
    f = 1
    for i in range(2, number + 1):
        print(f"Task {name}: Compute factorial({i})...")
        await asyncio.sleep(1)
        f *= i
    print(f"Task {name}: factorial({number}) = {f}")

async def main():
    a = factorial("A", 2)
    b = factorial("B", 3)
    c = factorial("C", 4)
    #
    # example passing in list of coroutines
    #
    await asyncio.gather(*[a,b,c])

asyncio.run(main())