一、以已有普通函数为参数,直接用Process类进行实例化(常用)
from multiprocessing import Process 线程为from Threading import Thread def f(name): pass if __name__ == '__main__': (此种方式在windows系统下必须在该代码下建立进程) p = Process(target=f, args=('bob',)) 线程为Thread p.start() p.join()
二、先继承Process建立一个生成进程的类 (通常命名为MyProcess),再利用该类以实例化方式生成进程。
class MyProcess(Process): def __init__(self,name): super().__init__() self.name=name def run(self): print(os.getpid()) pass
#if __name__ == '__main__':(可要可不要)
p1=MyProcess('111')
p2=MyProcess('222')
p1.start() #start会自动调用run
p2.start()
p1.join()
p2.join()
三、守护进程 (会在主进程代码执行结束后就终止)
p.daemon=True #一定要在p.start()前设置,设置p为守护进程,禁止p创建子进程,并且父进程代码执行结束,p即终止运行
注意守护线程:主线程运行结束后不会立刻结束,要等其他线程全部结束后才会结束,因为主线程结束意味着所在进程的结束。
但有例外,若将其他线程定义为守护线程,则该线程会在主线程运行结束时,不再执行剩余动作而和主线程一起立刻结束。
四、锁:并发--->串行,牺牲了运行效率,但避免了竞争
from multiprocessing import Process,Lock
def f(lock,n): lock.acquire() 竞争性操作 lock.release() if __name__ == '__main__': lock=Lock() for i in range(3): p=Process(target=work,args=(lock,i)) p.start()