######进程
from multiprocessing import Process
import os
def func(a,b):
print(os.getpid(),os.getppid(),a,b) #pid子进程 ppid父进程
if __name__ == "__main__":
print('main:',os.getpid(),os.getppid())
p = Process(target=func,args=('aa',7))
p.start()
###并发
from multiprocessing import Process
import os
import time
def func():
time.sleep(1)
print(os.getpid(),os.getppid())
if __name__ == "__main__":
print('main:',os.getpid(),os.getppid())
for i in range(10):
p = Process(target=func)
p.start()
####守护进程
from multiprocessing import Process
import time
def func1():
while True:
print('--->in fun1')
time.sleep(1)
def func2():
for i in range(5):
print('---->func2')
if __name__ == "__main__":
p1 = Process(target=func1)
p1.daemon = True #表示p1是一个守护进程,守护进程会在主进程结束代码的时候结束。
p1.start()
p2 = Process(target=func2)
time.sleep(3)
p2.start()
print('_in main_') #主进程会等待所有子进程结束,是为了回收子进程的资源
########锁
from multiprocessing import Process,Lock
import time
import json
def query(i):
with open('src/task','r',encoding='utf-8') as f:
file = json.load(f)
print(f"{i}:还有{file['ticket']}票")
def BuyTicket(i):
with open('src/task','r',encoding='utf-8') as f:
file = json.load(f)
if file['ticket'] > 0:
print(f'{i}买到票了')
file['ticket'] -= 1
time.sleep(0.1) #为了模拟网络中所耗的时间
with open('src/task','w',encoding='utf-8') as f:
json.dump(file,f)
def Main(i,lock):
query(i)
lock.acquire() #拿钥匙
BuyTicket(i)
lock.release() #还钥匙
if __name__ == '__main__':
l = Lock()
for i in range(5):
p = Process(target=Main,args=(i,l))
p.start()
#######队列
from multiprocessing import Queue,Process
import time
import random
def consumers(q,name):
for i in range(10):
print(f"{name}吃了{q.get()}")
def produce(q,name,food):
for i in range(5):
foodi = '%s%s'%(food,i)
print(f"{name}生产了{foodi}")
time.sleep(random.random())
q.put(foodi)
if __name__ == "__main__":
q = Queue()
c = Process(target=consumers,args=(q,'cc'))
p1 = Process(target=produce,args=(q,'test1','西瓜汁'))
p2 = Process(target=produce,args=(q,'test2','苹果汁'))
c.start()
p1.start()
p2.start()
p1.join()
p2.join()
python-进程、锁、队列
最新推荐文章于 2024-02-26 20:21:08 发布