1.yield实现多任务
import time
def task_1():
while True:
print("---1---")
time.sleep(.5)
yield
def task_2():
while True:
print("---2---")
time.sleep(.5)
yield
def main():
t1 = task_1()
t2 = task_2()
while True:
next(t1)
next(t2)
main()
![](https://img.haomeiwen.com/i2476123/ff79752b0387cfba.png)
2.gevent实现多任务
import gevent
def task1():
while True:
print("1")
gevent.sleep(.5)
def task2():
while True:
print("2")
gevent.sleep(.5)
def task3():
while True:
print("3")
gevent.sleep(.5)
g1 = gevent.spawn(task1)
g2 = gevent.spawn(task2)
g3 = gevent.spawn(task3)
g1.join()
g2.join()
g3.join()
![](https://img.haomeiwen.com/i2476123/f36565e3070b3292.png)
import gevent
def task1():
while True:
print("1")
# gevent.sleep(.5)
def task2():
while True:
print("2")
# gevent.sleep(.5)
def task3():
while True:
print("3")
# gevent.sleep(.5)
g1 = gevent.spawn(task1)
g2 = gevent.spawn(task2)
g3 = gevent.spawn(task3)
g1.join()
g2.join()
g3.join()
取消延时函数后、阻塞在task1死循环
协程的核心思想是分配线程的执行时间片
3.自动优化时间片
import gevent
from gevent import monkey
import time
monkey.patch_all() #自动规划ask中的延时片轮转
def task1():
while True:
print("1")
time.sleep(.5)
def task2():
while True:
print("2")
time.sleep(.5)
def task3():
while True:
print("3")
time.sleep(.5)
gevent.joinall(
[
gevent.spawn(task1),
gevent.spawn(task2),
gevent.spawn(task3)
]
)
4.Python语言原生协程
import asyncio
async def nested():
return 42
async def main():
# Schedule nested() to run soon concurrently
# with "main()".
task = asyncio.create_task(nested())
# "task" can now be used to cancel "nested()", or
# can simply be awaited to wait until it is complete:
await task
asyncio.run(main())
网友评论