python多进程

2020-02-12 174次浏览 已收录 10个评论

一、锁

import multiprocessing
import time
'''
多进程,并发执行
多进程加锁,挨个执行,仍然是乱序的 ----》进程同步
'''
def go(lock,i):
    with lock:
        time.sleep(2)
        print(i)
if __name__=="__main__":
    lock=multiprocessing.RLock()
    for i in range(10):
        multiprocessing.Process(target=go,args=(lock,i)).start()

二、pip管道

import os
import multiprocessing
def go(conn):
    conn.send(["d","f"])
    print("-",conn.recv())
    conn.close()
if __name__=="__main__":
    conn_a,conn_b=multiprocessing.Pipe()# 创建一个管道
    p=multiprocessing.Process(target=go,args=(conn_a,))
    p.start()
    conn_b.send([1,2,3,4])
    print("*",conn_b.recv())
    p.join()

三、共享列表字典

import os
import multiprocessing
def go(conn):
    conn.send(["d","f"])
    print("-",conn.recv())
    conn.close()
if __name__=="__main__":
    conn_a,conn_b=multiprocessing.Pipe()# 创建一个管道
    p=multiprocessing.Process(target=go,args=(conn_a,))
    p.start()
    conn_b.send([1,2,3,4])
    print("*",conn_b.recv())
    p.join()

四、共享数据

import multiprocessing
def go(num):
    num.value=22
if __name__=="__main__":
    num=multiprocessing.Value("d",33)#d代表数据,多个进程之间共享数据
    print(num.value)
    p=multiprocessing.Process(target=go,args=(num,))
    p.start()
    p.join()
    print(num.value)

五、共享数组

import multiprocessing
def go(num):
    num[2]=224
if __name__=="__main__":
    num=multiprocessing.Array("i",[1,2,3,4])
    print(num[:])
    p=multiprocessing.Process(target=go,args=(num,))
    p.start()
    p.join()
    print(num[:])

六、共享队列

#队列是单向的,而管道是双向的

import multiprocessing
queue=multiprocessing.Queue()
def func(qu):
    qu.put([2,3,4,5])#子进程插入 #multiprocessing特定的queue
if __name__=="__main__":
    p=multiprocessing.Process(target=func,args=(queue,))
    p.start()
    print(queue.get())#父进程取出




import multiprocessing
queue=multiprocessing.Queue()
def func(qu):
    qu.put([2,3,4,5])#子进程插入 #multiprocessing特定的queue
if __name__=="__main__":
    queue.put(["1","2"])
    #如果这样,就只会输出输出1和2,因为队列是单向的,
    # 这里主进程也插入,那么子进程就不能插入了
    p=multiprocessing.Process(target=func,args=(queue,))
    p.start()
    p.join()
    print(queue.get())#父进程取出
    #只能单向通信
    #父进程插入  子进程读取
    #子进程插入  父进程读取

 


渣渣龙, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python多进程
喜欢 (0)

您必须 登录 才能发表评论!

(10)个小伙伴在吐槽
  1. 给你点赞
    小蚯蚓2020-03-27 12:52
  2. good厉害了
    努力2020-03-27 13:43
  3. 我也是学计算机的
    靓仔2020-03-27 14:09
  4. 挺明白的
    你好2020-03-28 16:33
  5. 我也是学计算机的
    靓妹2020-03-28 17:25
  6. 我给你点赞了
    我也是渣渣2020-03-28 17:50
  7. 我给你点赞了
    笔记本2020-05-26 09:22
  8. 我也是小白以后多多交流
    我也是渣渣2020-05-26 09:48
  9. 你哥2020-05-26 10:14
  10. 给你点赞
    靓妹2020-05-26 10:37