python-进程、锁、队列

######进程
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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值