zoukankan      html  css  js  c++  java
  • Python 多任务(进程) day1(3)

    1. 进程间的通信
      1. 可以用socket进行进程间的通信
      2. 可以用同一文件来进行通信,即在同一个文件中进行读写操作的交流(但是在硬盘上读取和写入比较慢,内存运行太快了)
      3. Queue队列(记得是队列)  在同一内存中通信
        1. 因为进程之间不能共享全局变量,所以通过创建队列,把队列当成实参传入函数
        2. multiprocessing.Queue()  创建队列,括号里面可以填数字代表最多存放几个,不填的话,系统自动把你选择最大的
        3. 可以用  x.put(XX) 来存入数据,如果是满的,就堵塞
        4. 可以用  x.get(XX) 来取出数据,如果是空的,就堵塞
        5. 可以用  x.full() / x.empty()  来检验队列是否为 慢/空,返回 False或 True
        6. 用来解耦
    2. 进程池Pool
      1. 作用:缓存,可以让人们重复利用进程池里的进程,因为进程的创建和销毁需要大量资源
      2. 概念:就像开饭店一样,每个座椅都是一个进程,总不能来一个人买一套座椅,然后再卖掉,再来一个人再买再卖;
              所以只能预先买好座椅,但如果来100个人,难道要买一百套吗? 
                   不!可能只买20套就是最好的(需要根据测试),这样就能即快速,又经济地服务所有人
      3. multiprocessing.Pool(3)  最大进程数3,但如果在短时见内加入多个进程,即不会失败也不会堵塞,而会把多出来的进程存储起来
      4.  x.close()  # 关闭进程池
      5. x.join()     # 进程池的主进程不会等待池里的进程结束才结束,会自己结束,所以要调用 x.join() 来等待池中的子进程结束,必须放在close语句后

    试了一下发现多进程需要在main函数中使用,如果直接在外面创建使用就不行,只能加main函数,然后在main中调用
    https://fishc.com.cn/forum.php?mod=viewthread&tid=158430&page=1#pid4419075

    如果想要让主进程和进程池进行通信,就要用 multiprocessing.Manager.Queue()  创建队列

  • 相关阅读:
    变量
    总结 对象
    学生管理系统
    [Altera] Device Part Number Format
    [Matlab] sum
    [Matlab] Galois Field
    [C] static和extern的作用
    [Python] list
    [Python] raw_input
    [软件] UnicornViewer
  • 原文地址:https://www.cnblogs.com/otome/p/12378448.html
Copyright © 2011-2022 走看看