CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: jackfrued/Python-100-Days
Path: blob/master/Day16-20/code/example23.py
Views: 729
1
"""
2
协程(coroutine)- 可以在需要时进行切换的相互协作的子程序
3
"""
4
import asyncio
5
6
from example15 import is_prime
7
8
9
def num_generator(m, n):
10
"""指定范围的数字生成器"""
11
yield from range(m, n + 1)
12
13
14
async def prime_filter(m, n):
15
"""素数过滤器"""
16
primes = []
17
for i in num_generator(m, n):
18
if is_prime(i):
19
print('Prime =>', i)
20
primes.append(i)
21
22
await asyncio.sleep(0.001)
23
return tuple(primes)
24
25
26
async def square_mapper(m, n):
27
"""平方映射器"""
28
squares = []
29
for i in num_generator(m, n):
30
print('Square =>', i * i)
31
squares.append(i * i)
32
33
await asyncio.sleep(0.001)
34
return squares
35
36
37
def main():
38
"""主函数"""
39
loop = asyncio.get_event_loop()
40
future = asyncio.gather(prime_filter(2, 100), square_mapper(1, 100))
41
future.add_done_callback(lambda x: print(x.result()))
42
loop.run_until_complete(future)
43
loop.close()
44
45
46
if __name__ == '__main__':
47
main()
48
49