协程:假的多任务,一个一个执行,并不是同时执行:并发
1. yield
import time
def task_1():
while True:
print("-----1-----")
time.sleep(0.1)
yield
def task_2():
while True:
print("-----2-----")
time.sleep(0.1)
yield
def main():
t1 = task_1()
t2 = task_2()
while True:
next(t1)
next(t2)
if __name__ == "__main__":
main()
2.greenlet
import time
from greenlet import greenlet
def task_1():
while True:
print("-----1-----")
gr2.switch()
time.sleep(0.5)
def task_2():
while True:
print("-----2-----")
gr1.switch()
time.sleep(0.5)
gr1 = greenlet(task_1)
gr2 = greenlet(task_2)
gr1.switch()
3.gevent
import gevent
import time
from gevent import monkey
monkey.patch_all()
def f1(n):
for i in range(n):
print(gevent.getcurrent(), i)
time.sleep(0.5)
def f2(n):
for i in range(n):
print(gevent.getcurrent(), i)
time.sleep(0.5)
def f3(n):
for i in range(n):
print(gevent.getcurrent(), i)
time.sleep(0.5)
print("---------1--------")
g1 = gevent.spawn(f1, 5)
print("---------2--------")
g2 = gevent.spawn(f2, 5)
print("----------3-------")
g3 = gevent.spawn(f3, 5)
print("----------4-------")
g1.join()
g2.join()
g3.join()