并发通信

1. 进程间通信

进程间内存资源隔离,互不干扰
进程间通信解决方案:Manager
Manager有三个方法:
Manager.list() 实例化一个可以在进程间通信的空列表
Manager.dict() 实例化一个可以在进程间通信的空字典
Manager.Queue() 实例化一个可以在进程间通信的空队列

from multiprocessing import Manager,Process
import random,os

def task(li):
    li.append(random.randint(1,100))
    print(li,id(mylist),os.getpid())


if __name__ == '__main__':
    mylist = Manager().list()
    t1 = Process(target=task,args=(mylist,))
    t1.start()
    t1.join()
    print(mylist,id(mylist),os.getpid())

在不同的进程中取到了相同id的列表,Manager是属性是守护的,不写join()方法会报错。

2. 线程间通信

线程间资源共享,且相互竞争cpu,当多个线程同时运行时,数据不安全。通过互斥锁解决。

from threading import Thread, Lock
import time

a = 0


def func_a(lock):
    global a
    for i in range(100000):
        lock.acquire()
        a += 1
        lock.release()


def func_b(lock):
    global a
    for i in range(100000):
        lock.acquire()
        a -= 1
        lock.release()


if __name__ == '__main__':
    lock = Lock()
    t1 = Thread(target=func_a, args=(lock,))
    t2 = Thread(target=func_b, args=(lock,))
    t1.start()
    t2.start()
    time.sleep(5)
    print(a)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值