美文网首页
二、并发通信

二、并发通信

作者: 梦捷者 | 来源:发表于2018-12-19 22:27 被阅读4次

    (一)进程间的通信

    1、进程间的内存资源是隔离的互不干扰的。(进程之间是相互独立的)    

    2、进程之间通信的解决方案

    import multiprocessing

    a=1

    def func():

            global a

             a=2

    if __name__=='__main__':

            p=multiprocessing.Process(target=func)

             p.start()

              p.join()

               print(a)

    3、Manager的基本使用(Manager相当于父进程在程序运行的时候会自动生成一个服务子进程,其作用相当于服务子进程中的保存公共数据的区域)

    from multiprocessing import Process,Manager

    def func(tu1):

            print('我是子进程,我现在要修改m_liast')

            tu1.append('a')

    if __name__=='__main__':

            m_list=Manager().list()

             print('我是主进程中的m_list,我现在的值是%s'%m_plist)

            p=Process(target=func,args=(m_list,))

            p.start()

             p.join()#会造成阻塞

            print("我是父进程中的m_list,我现在的值是%s"%m_list)

    (二)线程间的通信

    1、线程和线程之间的内存区域是可以共享的,全局变量是公用的。

    2、线程之间会争夺资源。

    代码:a、线程间全局变量的共享

                from threading import Thread

                        a=1

                  def fun():

                          print('我是子线程,我要修改全局变量a的值')

                            global a

                                a=2

                    if __name__=='__main__':

                             print('我是主线程,a现在的值是%s'%a)

                            p=Thread(target=func)

                            p.start()

                             p.join()#会造成阻塞

                             print('我是主线程,变量a现在的值是%s'%a)

                b、线程间的资源争夺

                    import threding

                      data=0

                       def add_1():

                                global data

                                for i in range(1000):

                                        data+=1

                        def add_2():

                                global data

                                for i in range(1000):

                                        data-=1

                        if  __name__='__main__':

                                p=Thread(target=func_1)

                                  p1=Thread(target=func_1)

                                  p.start()

                                  p.join()

                                  p1.satrt()

                                   p1.join()

                                    print(data)

    3、互斥锁:控制资源访问

     from  threding  import Thread,Lock

    import time

    data=0

    def add_1(lock):

                global data

                lock.acquire()

                for i in range(1000):

                        data+=1

                lock.release()

    def add_2(lock):

                                global data

                                 lock.acquire()

                                for i in range(1000):

                                        data-=1

                                lock.release()

    if  __name__='__main__':

                lock=Lock()

                p=Thread(target=func_1,args=(lock,))

                p1=Thread(target=func_1,args=(lock,))

                 p.start()

                   p.join()

                    p1.satrt()

                     p1.join()

                      time.sleep()

                     print(data)

    (三)进程和线程的安全队列

       1、队列的基本概念:一个入口,一个出口,数据具有先进先出特点的数据结构。

        2、队列的常用方法

    3、python的queue模块提供了同步的,线程安全的队列类。

    (四)生产者和消费者模型(通过队列实现)

    代码如下:

    相关文章

      网友评论

          本文标题:二、并发通信

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