【发布时间】:2019-09-21 17:19:50
【问题描述】:
我想要实现的目标是产生多个父母,每个父母都做一些工作,然后产生几个孩子来检查其他事情,并在父母身上获取这些结果以做进一步的工作。 我还尝试设置 2 个不同的生成限制,因为父项的工作可以比子项做的更多。
我将如何做到这一点?
如果我不使用limit2,它可以工作,但我想要两个限制器。
import trio
import asks
import time
import random
async def child(parent, i, sender, limit2):
async with limit2:
print('Parent {0}, Child {1}: started! Sleeping now...'.format(parent, i))
#await trio.sleep(random.randrange(0, 3))
print('Parent {0}, Child {1}: exiting!'.format(parent, i))
async with sender:
await sender.send('Parent {0}, Child {1}: exiting!'.format(parent, i))
async def parent(i, limit):
async with limit:
print('Parent {0}: started! Sleeping now...'.format(i))
#await trio.sleep(random.randrange(0, 3))
sender, receiver = trio.open_memory_channel(10)
limit2 = trio.CapacityLimiter(2)
async with trio.open_nursery() as nursery:
for j in range(10):
nursery.start_soon(child, i, j, sender, limit2)
async with receiver:
async for value in receiver:
print('Got value: {!r}'.format(value))
print('Parent {0}: exiting!'.format(i))
async def main():
limit = trio.CapacityLimiter(1)
async with trio.open_nursery() as nursery:
for i in range(1):
nursery.start_soon(parent, i, limit)
if __name__ == "__main__":
start_time = time.perf_counter()
trio.run(main)
duration = time.perf_counter() - start_time
print("Took {:.2f} seconds".format(duration))
【问题讨论】:
-
当你运行你的代码时会发生什么,它与你期望的有什么不同?
-
它没有打印
print('Parent {0}: exiting!'.format(i))或退出程序。我认为这可能与limit2 = trio.CapacityLimiter(3)有关,因为没有它,它可以按我的预期工作。但我想在那里设置一个限制。 -
这也是我尝试做一些基本的事情,所以我以后可以开始使用 python-asks,所以我有类似样板的东西,我为多个网站生成一个工人,然后为每个网站我将生成x 工人进行一些检查,然后将该信息与我之前的信息一起返回。