python多进程

首页 » 线/进程 » python多进程

一、锁

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())#父进程取出
    #只能单向通信
    #父进程插入  子进程读取
    #子进程插入  父进程读取

 

分享到:
赞(0) 打赏

评论 10

评论前必须登录!

 

  1. #1

    给你点赞

    小蚯蚓6个月前 (03-27)
  2. #2

    good厉害了

    努力6个月前 (03-27)
  3. #3

    我也是学计算机的

    靓仔6个月前 (03-27)
  4. #4

    挺明白的

    你好6个月前 (03-28)
  5. #5

    我也是学计算机的

    靓妹6个月前 (03-28)
  6. #6

    我给你点赞了

    我也是渣渣6个月前 (03-28)
  7. #7

    我给你点赞了

    笔记本4个月前 (05-26)
  8. #8

    我也是小白以后多多交流

    我也是渣渣4个月前 (05-26)
  9. #9

    你哥4个月前 (05-26)
  10. #10

    给你点赞

    靓妹4个月前 (05-26)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00