zoukankan      html  css  js  c++  java
  • 进程相关内容

    一、创建进程的两种方式

     1 #方式一:直接创建
     2 from multiprocessing import Process
     3 import time
     4 def f(name):
     5     time.sleep(1)
     6     print('hello',name,time.ctime())
     7 
     8 if __name__ == '__main__':
     9     p_list = []
    10     for i in range(3):
    11         p = Process(target=f,args=('alex',))    #创建子进程
    12         p_list.append(p)
    13         p.start()     #启动子进程
    14     for p in p_list:
    15         p.join()
    16     print('end')
    17 
    18 '''方式2:通过类创建'''
    19 from multiprocessing import Process
    20 import time
    21 class MyProcess(Process):
    22     def __init__(self):
    23         super(MyProcess, self).__init__()
    24     def run(self):
    25         time.sleep(1)
    26         print('hello',self.name,time.ctime())
    27 if __name__ ==  '__main__':
    28     p_list = []
    29     for i in range(3):
    30         p = MyProcess()
    31         p_list.append(p)
    32         p.start()
    33     for p in p_list:
    34         p.join()

    二、queue实现数据共享

     1 from multiprocessing import Process,Queue
     2 
     3 def f(q):
     4     q.put([5,'hel'])   #往队列里加内容
     5 
     6 def f2(q):
     7     print(q.get())
     8 
     9 if __name__ == '__main__':
    10     q = Queue()    #创建进程队列对象
    11 
    12     p_list = []
    13     for i in range(3):
    14         p = Process(target=f,args=(q,))   #创建进程
    15         p_list.append(p)
    16     for p in p_list:
    17         p.start()
    18     for p in p_list:
    19         p.join()
    20 
    21     p2_list = []
    22     for i in range(3):
    23         p2 = Process(target=f2,args=(q,))
    24         p2_list.append(p2)
    25     for p2 in p2_list:
    26         p2.start()
    27     for p2 in p_list:
    28         p2.join()
    29 '''1.实现的功能:通过三个进程往一个队列里存三条内容,然后用另外三个进程从队列取内容并打印
    30    2.实现的方式:在创建子进程时将主进程中创建的队列对象通过参数传到子进程中'''

    三、Pipe实现进程通信

     1 '''通过Pipe对象实现进程通信'''
     2 from multiprocessing import Process,Pipe
     3 
     4 def f(conn):
     5     conn.send('')
     6     conn.close()
     7 
     8 if __name__ == '__main__':
     9     parent_conn,child_conn = Pipe()
    10     p = Process(target=f,args=(child_conn,))   #创建进程
    11     p.start()
    12     print(parent_conn.recv())
    13     p.join()
    14 
    15 '''通过Pipe对象实现进程通信,类似于socket通信一收一发'''

    四、manager实现数据共享

     1 from multiprocessing import Process,Manager
     2 
     3 def f(d,l,n):
     4     d[n] = '1'
     5     d['2'] = 2
     6     d[0.25] = None
     7     l.append(n)
     8 
     9 if __name__ == '__main__':
    10     with Manager() as manager:
    11         d = manager.dict()   #用manager创建字典
    12         l = manager.list()   #用manager创建列表
    13         p_list = []
    14         for i in range(10):
    15             p = Process(target=f,args=(d,l,i))
    16             p.start()
    17             p_list.append(p)
    18         for p in p_list:
    19             p.join()
    20 
    21         print(d)
    22         print(l)
    23 
    24 '''1.十个进程同时去操作同一字典/列表
    25    2.用Manager()对象创建的列表/字典可以被多个进程同时使用,实现数据共享'''
  • 相关阅读:
    CentOS查看系统信息和资源使用已经升级系统的命令
    192M内存的VPS,安装Centos 6 minimal x86,无法安装node.js
    Linux限制资源使用的方法
    多域名绑定同一IP地址,Node.js来实现
    iOS 百度地图大头针使用
    iOS 从app跳转到Safari、从app打开电话呼叫
    设置cell背景色半透明
    AsyncSocket 使用
    iOS 监听键盘变化
    iOS 7 标签栏控制器进行模态视图跳转后变成透明
  • 原文地址:https://www.cnblogs.com/Finance-IT-gao/p/10678779.html
Copyright © 2011-2022 走看看