多进程:
多进程代码:
import multiprocessing
def dance():
.....
def sing():
.....
if __name__ == '__main__':
# group:表示进程组 目前只能为None
# target:表示执行进程的任务名(函数名,方法名)
# name: 进程名称,默认是Process-1,....
dance_proess = multiprocessing.Process(target=dance,name='myprocess1')
sing_proess = multiprocessing.Process(target=sing)
# 启动子进程执行对应的任务
dance_proess.start()
sing_proess.start()
多进程执行带有参数的任务:
def task(count):
.........
if __name__ == '__main__':
# args: 以元组的方式给任务传入参数(只有一个数据必须加逗号)
sub_process = multiprocessing.Process(target=task, args=(5,))
# kwargs: 以字典方式传入参数
sub_process = multiprocessing.Process(target=task, kwargs={"count":3})
守护进程:
①进程间不共享全局变量
②主进程会等待所有子进程执行结束在结束
设置守护进程的两个方式:
①进程名.daemon = True (在进程执行前写) start()前
②进程名.terminate() (在主进程退出前写) exit()前
多线程:
导入线程模块: import threading
创建子线程并指定执行任务:sub_thread = threading.Thread(target=任务名)
线程执行任务并传参的两种方式:元组args 字典kwargs 和进程一样
守护主线程:
①sub_thread = threading.Thread(target=show_info, daemon=True)
②sub_thread.setDaemon(True)
线程之间共享全局变量但是会产生全局变量数据错误
解决方式:线程等待(join) 和 互斥锁
线程等待:
first_thread.start()
first_thread.join()
second_thread.start()
互斥锁: (要在合适的地方释放锁 避免死锁)
创建全局互斥锁:threading.Lock()
上锁:lock.acquire()
释放锁:lock.release()
协程
安装: pip install gevent
import gevent
def f(n):
......
g1 = gevent.spawn(f,5)
g2 = gevent.spawn(f,5)
g1.join()
g2.join()