python_并发编程——数据共享

1.数据共享

  实现进程之间的数据共享

from multiprocessing import Manager,Process
class MyPro(Process):
    def __init__(self,dic):
        super().__init__()
        self.dic = dic
    def run(self):
        self.dic[‘count‘] -= 1
        print(self.dic)

if __name__ == ‘__main__‘:
    m = Manager()
    dic = m.dict({‘count‘:100})
    p = MyPro(dic)
    p.start()
    p.join()
    print(‘主进程:‘,dic)

结果:    

2.但是这种数据共享还是存中安全性问题,当有多个进程同时访问数据的时候,还是会出错,当应用在有多个进程的时候,还是要加锁

from multiprocessing import Manager,Process,Lock
class MyPro(Process):
    def __init__(self,dic,lock):
        super().__init__()
        self.dic = dic
        self.lock = lock
    def run(self):
        self.lock.acquire()
        self.dic[‘count‘] -= 1
        self.lock.release()
        # print(self.dic)

if __name__ == ‘__main__‘:
    lock = Lock()
    m = Manager()
    dic = m.dict({‘count‘:100})
    p_list = []
    for i in range(50):
        p = MyPro(dic,lock)
        p.start()
        p_list.append(p)
    for i in p_list:
        p.join()
    print(‘主进程:‘,dic)

结果:

原文地址:https://www.cnblogs.com/wangdianchao/p/12080687.html

时间: 2024-10-30 20:42:24

python_并发编程——数据共享的相关文章

python_并发编程——管道和数据共享

1.管道 from multiprocessing import Pipe conn1,conn2 = Pipe() #返回两个值 conn1.send('wdc') #发送 print(conn2.recv()) #接收 conn2.send('yhf') print(conn1.recv()) 结果:~双向通信 2.在进程中传递数据 from multiprocessing import Pipe,Process class Pr1(Process): def __init__(self,c

python_并发编程——多线程

1.多线程并发 from threading import Thread import time def func(n): time.sleep(1) print(n) for i in range(10): t = Thread(target=func,args=(i,)) #将函数注册进子线程,并传递参数 t.start() #启动子线程 结果:  2.另外一种启动多线程的方法 from threading import Thread import time class MyTread(Th

python_并发编程——多进程的第二种启动方式

1.多进程的第二种启动方式 import os from multiprocessing import Process # 创建一个自定义类,继承Process类 class MyProcess(Process): # 必须实现一个run方法,run方法中是子进程中执行的代码 def run(self): print('子进程:',os.getpid()) if __name__ == '__main__': print('主进程',os.getpid()) p1 = MyProcess() p

python_并发编程——锁

多进程模拟买票~ import time import json from multiprocessing import Process class Show(Process): #查 def run(self): with open('ticket') as f: dic = json.load(f) print("余票:{}".format(dic['ticket'])) class Buy_ticket(Process): #买 def __init__(self,name):

python_并发编程——进程池

1.进程池 from multiprocessing import Pool def func(n): for i in range(10): print(n+1) if __name__ == '__main__': pool = Pool(3) #启动有三个进程的进程池. #第一个参数进程要访问的代码,第二个参数必须是一个可迭代参数,规定了要执行的任务数 pool.map(func,range(100)) #100个任务 结果: 每个数打印了10次. 2.进程池和多进程的用时对比 def f

python_并发编程——线程池

1.线程池 import time from concurrent.futures import ThreadPoolExecutor def func(n): time.sleep(2) print(n) t_pool = ThreadPoolExecutor(max_workers=5) # 创建线程池对象,设置线程池大小,建议不超过cpu数*5 for i in range(20): t_pool.submit(func,i) # 启动进程池,(执行的函数,传递的参数) 结果:每过两秒钟随

C++并发编程 02 数据共享

在<C++并发编程实战>这本书中第3章主要将的是多线程之间的数据共享同步问题.在多线程之间需要进行数据同步的主要是条件竞争. 1  std::lock_guard<std::mutex> #include <list> #include <mutex> #include <algorithm> std::list<int> some_list; std::mutex some_mutex; void add_to_list(int n

python-学习-python并发编程之多进程与多线程

一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Python提供了multiprocessing.    multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似.  multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,

《C++ 并发编程》- 第1章 你好,C++的并发世界

<C++ 并发编程>- 第1章 你好,C++的并发世界 转载自并发编程网 – ifeve.com 本文是<C++ 并发编程>的第一章,感谢人民邮电出版社授权并发编程网发表此文,版权所有,请勿转载.该书将于近期上市. 本章主要内容 何谓并发和多线程 为什么要在应用程序中使用并发和多线程 C++并发支持的发展历程 一个简单的C++多线程程序是什么样的 这是C++用户的振奋时刻.距1998年初始的C++标准发布13年后,C++标准委员会给予程序语言和它的支持库一次重大的变革.新的C++标