进程的创建
(1) 面向方法的方式创建
from multiprocessing import Process
#进程绑定的函数
def func(arg1,arg2):
print(arg1,arg2)
if __name__=="__main__":
#注册一个进程,绑定函数
p=Process(target=func,args=('参数1','参数2'))
#开启进程
p.start()
(2)面向对象的方法创建
from multiprocessing import Process
#继承Process类
class MyProcess(Process):
def __init__(self,arg1,arg2):
self.arg1=arg1
self.arg2=arg2
def run(self):
print(self.arg1,self.arg2)
if __name__=="__main__":
p=MyProcess(1,2)
p.run()
以上例子为单个进程的创建,至于多个进程可以用for循环多次实现上面的方法和创建多个对象。
进程之间的数据隔离
进程与进程之间的数据无法直接进行传输,要用到tuple,栈等数据链。
from multiprocessing import Process
def func():
global n
n=1
print("子进程的n:",n)
if __name__=="__main__":
n=0
p=Process(target=func)
p.start()
p.join()
print("主进程的n:",n)
进程锁
进程锁用于进程在访问共享资源的时候,每个进程都加一个锁,保证数据的安全性与完全性。
新建一个ticket文件,作为共享资源。
import json
import time
from multiprocessing import Process
from multiprocessing import Lock
def buy_ticket(i,lock):
lock.acquire()
with open('ticket') as f:
dic = json.load(f)
time.sleep(0.1)
if dic['ticket'] > 0 :
dic['ticket'] -= 1
print('\033[32m%s买到票了\033[0m'%i)
else:
print('\033[31m%s没买到票\033[0m'%i)
time.sleep(0.1)
with open('ticket','w') as f:
json.dump(dic,f)
lock.release()
if __name__ == '__main__':
lock = Lock()
for i in range(5):
p = Process(target=buy_ticket, args=(i,lock))
p.start()