一、依赖的三方库
协程库:gevent
线程库: threading
进程库: multiprocessing
二、多协程
import gevent,time
def demo1(num):
for i in range(num):
print('协程1:{:-<30}'.format(111))
#模拟耗时操作,geven创建的t协程遇到耗时操作后会切换到其它协程
gevent.sleep(0.5)
def demo2(num):
for i in range(num):
print('协程2:{:->30}'.format(222))
gevent.sleep(0.5)
if __name__ == '__main__':
#创建协程对象,内部参数(协程指向的函数名称,要传递的参数)
g1=gevent.spawn(demo1,4)
g2=gevent.spawn(demo2,4)
#等待协程运行完成
g1.join()
g2.join()
打印结果:
三、多线程
import threading
from time import sleep
def song(num):
for i in range(num):
print('{:*^30}'.format('唱歌'))
sleep(1)
def dance(num):
for i in range(num):
print('{:-^30}'.format('跳舞'))
sleep(1)
def main():
#实例化两个线程,并启动
#target指向函数,args后面跟元组格式的参数,当作实际参数传入函数中
threading.Thread(target=song,args=(5,)).start()
threading.Thread(target=dance,args=(5,)).start()
#打印线程数
print(threading.enumerate())
if __name__ =='__main__':
main()
打印结果:
可以看到一个主线程和两个子线程
四、多进程
import multiprocessing,os
from time import sleep
def song(num):
for i in range(num):
print('{:*^30}'.format('唱歌'))
#查看该进程的id
print(os.getpid())
sleep(1)
def dance(num):
for i in range(num):
print('{:-^30}'.format('跳舞'))
#查看该进程的id
print(os.getpid())
sleep(1)
def main():
#实例化两个进程,并启动
#target指向函数,args后面跟元组格式的参数,当作实际参数传入函数中
multiprocessing.Process(target=song,args=(5,)).start()
multiprocessing.Process(target=dance, args=(5,)).start()
#查看主进程id
print(os.getpid())
if __name__ =='__main__':
main()
打印结果:
可以看到一个主进程号和两个子进程号