zoukankan      html  css  js  c++  java
  • day 29

    一.开启进程的两种方式:

    方式一:
    # 方式一:
    from multiprocessing import Process
    import  time
    
    def task():
        print("1111")
        time.sleep(0.5)
        print("22222")
    
    
    # 在windows中开启进程必须在 __name__ == "__main__"代码中:
    if __name__ == "__main__":
        p = Process(target=task)
        p.start()  # 像操作系统发送一个开辟进程的请求(需要一段时间间隔)
        print("333")
    #为何会先打印333:是因为在请求的同时(有一段时间间隔),计算会继续工作,从而打印下面的主进程
    
    方式二.
    from multiprocessing import Process
    import  time
    
    class Myprocess(Process):
        def __init__(self,name):
            super().__init__()
            self.name=name
        def run(self):
            print("1111")
            time.sleep(1)
            print("2222")
    
    # 在windows中开启进程必须在 __name__ == "__main__"代码中:
    if __name__ == "__main__":
        p = Myprocess("jxl")
        p.start()  # 像操作系统发送一个开辟进程的请求(需要一段时间间隔)
        time.sleep(0.5)
        print("333")

    二.join(让主进程在原地等待,等待子进程运行完毕后,不会影响子进程的执行)

    from multiprocessing import Process
    import time
    
    
    def task(i):
        print("子进程:%s" % i)
        print(i * 10)
    
    p_l=[]
    if __name__ == "__main__":
        for i in range(10):
            p = Process(target=task, args=(i,))
            p_l.append(p)
            p.start()
        for p in p_l:
            p.join()
        print("主进程来了")

    三.进程之间的内存空间互相隔离

    from multiprocessing import Process
    
    n = 100
    def task():
        global n
        n = 0
        print(n)
    
    
    if __name__ == "__main__":
        p = Process(target=task)
        p.start()
        print(n)  #打印的是主进程的n,不受子进程的影响

    四.

    1.僵尸进程:在linux中,一个进程使用fork创建子进程,如果子进程退出,而父进程没有去获取子进程的状态信息,那么这些这些子进程的描述符任然保存在系统中
    2. 孤儿进程:一个父进程退出,而他的子进程们还在运行,那么子进程将变成孤儿进程会被init进程收养

    五.守护进程:本质就是一个子进程,该子进程的生命周期<=被守护进程的生命周期 p.daemon=True

    from multiprocessing import Process
    import  time
    def task():
        print("正在守护")
        time.sleep(1)
        print("已死")
    
    if __name__ == "__main__":
        p = Process(target=task)
        p.daemon=True
        p.start()
        time.sleep(0.5)
        print("主进程死了")  #打印的是主进程的n,不受子进程的影响

    六.互斥锁:

    
    
    from multiprocessing import Process, Lock
    import json
    import time
    import random


    def search(name): # 查找车票
    with open("db.json", 'rt', encoding="utf-8")as f:
    dic = json.load(f)
    time.sleep(1)
    print("%s:还有余票 %s" % (name, dic["count"]))


    def get(name):
    with open("db.json", 'rt', encoding="utf-8")as f:
    dic = json.load(f)
    if dic["count"] > 0:
    dic["count"] -= 1
    time.sleep(random.randint(1, 3))
    with open("db.json", 'wt', encoding="utf-8")as f:
    json.dump(dic, f)
    print("%s:购票成功" %name)
    else:
    print("%s:已经没有票可买" % name)


    def task(name, mutex):
    search(name)
    # mutex.acquire()
    get(name) # 串行
    # mutex.release()
    # with mutex:
    # get(name)

    if __name__ == "__main__":
    mutex = Lock()
    for i in range(10):
    p = Process(target=task, args=("用户:%s" % i, mutex,))
    p.start()
    # p.join()

     
  • 相关阅读:
    洛谷 P1555 尴尬的数字
    洛谷 P1318 积水面积
    9.8解题报告
    洛谷 P1464 Function
    洛谷 P1122 最大子树和
    cogs 66. [HAOI2004模拟] 数列问题
    49. 跳马问题
    洛谷 P3137 [USACO16FEB]圆形谷仓Circular Barn_Silver
    codevs 3164 质因数分解
    codeforces 482C Game with Strings
  • 原文地址:https://www.cnblogs.com/jxl123/p/9592987.html
Copyright © 2011-2022 走看看