美文网首页
网络系统

网络系统

作者: 心软脾气硬01 | 来源:发表于2018-10-16 20:46 被阅读0次
    1. 程序:一堆冷冰冰的代码,编写完毕的代码,在没有运行的时候,称之为程序
      进程:把程序运行起来就会开启进程,正在运行着的代码,就成为进程

    2. getpid:获取进程号
      getppid:获取父进程号

    3. 单核CPU是怎么执行多任务的呢?
      操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。

    4. 并行:一起执行
      并发:看似一起执行,其实按一定顺序执行

    import os
    pid=os.fork()
    if pid==0:
        print('子进程')
    else:
        print('父进程')
    
    1. os.fork()
      子进程返回的是0
      父进程返回的是子进程的pid
      多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响-----------全局变量对于进程是不共享的

    2. 实现多进程

    from multiprocessing import Process
    import time
    def work():
        for i in range(5):
            time.sleep(1)
            print('呵呵')
    p=Process(target=work)
    p.start()
    
    1. 用面向对象的方式实现多进程
    from multiprocessing import Process
    import time
    class MyProcess(Process):
        def __init__(self):#初始化父类方法
            super().__init__()
        def run(self):#重写run方法
            for i in range(5):
                time.sleep(1)
                print('哈哈')
    p=MyProcess()
    p.start()
    p.join(3)
    print('呵呵')
    
    1. 用进程池的方式创建进程
    from multiprocessing import Pool
    import time
    def work():
        for i in range(5):
            time.sleep(1)
            print('老王')
    p=Pool(3)
    for i in range(3):
        p.apply_async(work)#非阻塞添加进程
        #p.apply(work)#阻塞
        print('添加成功')
    p.close()#把池子关闭
    p.join()
    
    1. 用Queue实现多进程通信
    from multiprocessing import Pool,Manager
    import time
    def write(q):
        for i in range(5):
            time.sleep(0.5)
            print('添加成功')
            q.put(i)
    def read(q):
        while True:
            if q.qsize()>0:
                print(q.get())
            if q.get()==4:
                break
    p=Pool(3)
    q=Manager().Queue()
    p.apply(write,(q,))
    p.apply(read,(q,))
    p.close()
    p.join()
    
    1. threading线程实现多任务
    import time
    from threading import Thread
    def say():
        time.sleep(1)
        print('我错了,我能站起来了吗?')
    for i in range(5):
        t=Thread(target=say)
        t.start()
    

    主线程会等待所有的子线程结束后才结束

    1. 用面向对象的实现
    from threading import Thread
    import time
    
    class MyThread(Thread):
    
        def run(self):
            for i in range(3):
                time.sleep(1)
                print("我爱你中国")
    t = MyThread()
    t.start()
    t1 = MyThread()
    t1.start()
    
    1. 全局变量对于线程共享(对于进程不共享)
    from threading import Thread
    import threading 
    import time
    num = 0
    
    def test1():
        global num
        num+=1
        time.sleep(1)
        print(threading.currentThread().name)
        print('test1',num)
    
    def test2():
        time.sleep(3)
        print("test2",num)
    
    t1 = Thread(target=test1)
    t1.start()
    
    t2 = Thread(target=test2)
    t2.start()
    

    局部变量对于进程不共享

    相关文章

      网友评论

          本文标题:网络系统

          本文链接:https://www.haomeiwen.com/subject/zxrkzftx.html