》》》》线程中的queue

import threading
import queue
def f(qq):
print("in child",qq.qsize())#打印父进程中q扥数据个数
qq.put([42,None,'hellow'])#往父进程中的q增减新的数据 if __name__ == '__main__':
q = queue.Queue()#父进程生成一个q
q.put('test123')#往父进程中增加数据
p = threading.Thread(target=f,args=(q,))#生成一个子线程,子线程执行函数f
p.start()#执行子线程
p.join()#等待子线程执行结束之后,父进程往下执行
print("444", q.get_nowait())#第一次取q中的数据
print("444", q.get_nowait())#第二次取q中的数据

  1,父线程中生成一个q,子线程可以直接对q中的数据进行访问,访问完后父线程可以对子线程放入的数据进行操作,即数据实现了共享

》》》》》》》》进程中的queue

from multiprocessing import Process,Queue

import threading
def f(qq):
print("in child",qq.qsize())
qq.put([42,None,'hellow']) if __name__ == '__main__':
q = Queue()#生成一个 q
q.put('test123')
p = Process(target= f,args=(q,))#生成一个线程,与主线程完全独立的内存地址,将q作为参数传递给函数f
p.start()
p.join()
print("444", q.get_nowait())
print("444", q.get_nowait())

  1,区别线程中的queue和进程中的Queue的不同

》》》》》》》》》》》》》》》》Pipe

from multiprocessing import Process,Pipe

def f(conn):
conn.send([42, None, 'hellow from child1'])
print("from parent", conn.recv())
conn.send([42, None, 'hellow from child2'])
print("from parent",conn.recv())
conn.close() if __name__ == "__main__":
parent_conn , child_conn = Pipe()
p = Process(target = f ,args= (child_conn,))
p.start()
print(parent_conn.recv())
parent_conn.send('我是主线程过来的1')
print(parent_conn.recv())
parent_conn.send('我是主线程过来的2')
p.join()

  1,parent_conn , child_conn = Pipe()生成电话线两端的实例,相互接受

》》》》》》》》》》》》》manager

from multiprocessing import Process,Manager
import os
def f(d,l):#定义了一个字典和一个列表
d[(os.getpid())] = os.getpid()#当前线程的进程好加入到字典中
l.append(os.getpid())#当前进程的进程号加入到列表中
print(l)
if __name__ == '__main__':
# with Manager() as manager:
manager = Manager()#生成一个manager的实例
d = manager.dict()#生成一个字典可在多进程间共享和传递
l = manager.list(range(5))#生成一个列表可在多进程间共享和传递
p_list = []
for i in range(10):
p = Process(target=f,args=(d , l ))#生成带两个参数的进程
p.start()
p_list.append(p)
for result in p_list:
result.join()#等待结果
print(d)
print(l)

  1,with Manager() as manager:

2. manager = Manager()#生成一个manager的实例

 

三种进程和线程数据共享模块方法Queue》Pipe》manager的更多相关文章

  1. Windows内核基础知识-8-监听进程、线程和模块

    Windows内核基础知识-8-监听进程.线程和模块 Windows内核有一种强大的机制,可以在重大事件发送时得到通知,比如这里的进程.线程和模块加载通知. 本次采用链表+自动快速互斥体来实现内核的主 ...

  2. [转]SQL三种获取自增长的ID方法

     最新更新请访问: http://denghejun.github.io   SQL SERVER中的三种获得自增长ID的方法  这个功能比较常用,所以记下来以防自己忘掉. SCOPE_IDENTIT ...

  3. x64内核HOOK技术之拦截进程.拦截线程.拦截模块

    x64内核HOOK技术之拦截进程.拦截线程.拦截模块 一丶为什么讲解HOOK技术. 在32系统下, 例如我们要HOOK SSDT表,那么直接讲CR0的内存保护属性去掉. 直接讲表的地址修改即可. 但是 ...

  4. 三种dedecms调用相关文章的方法

    在文章的末尾或侧边栏添加相关文章可以提高用户的黏度,提高pv,增加se的好印象(哈哈),那么dedecms如何调用相关文章呢?有三种方法可以实现. 第一种dedecms调用相关文章的方法,用默认的li ...

  5. MySQL、SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法

    在这里主要讲解一下MySQL.SQLServer2000(及SQLServer2005)和ORCALE三种数据库实现分页查询的方法. 可能会有人说这些网上都有,但我的主要目的是把这些知识通过我实际的应 ...

  6. 三种计算c#程序运行时间的方法

    三种计算c#程序运行时间的方法 第一种: 利用 System.DateTime.Now // example1: System.DateTime.Now method DateTime dt1 = S ...

  7. 三种将list转换为map的方法(传统方法、jdk8 Stream流、guava)

    三种将list转换为map的方法 - jackyrong - ITeye博客:http://jackyrong.iteye.com/blog/2158009

  8. 三、进程和线程、协程在python中的使用

    三.进程和线程.协程在python中的使用 1.多进程一般使用multiprocessing库,来利用多核CPU,主要是用在CPU密集型的程序上,当然生产者消费者这种也可以使用.多进程的优势就是一个子 ...

  9. 多线程,线程类三种方式,线程调度,线程同步,死锁,线程间的通信,阻塞队列,wait和sleep区别?

    重难点梳理 知识点梳理 学习目标 1.能够知道什么是进程什么是线程(进程和线程的概述,多进程和多线程的意义) 2.能够掌握线程常见API的使用 3.能够理解什么是线程安全问题 4.能够知道什么是锁 5 ...

随机推荐

  1. 【转】使用Jasob混淆javascript代码

    在平常的web开发中,我们时常需要写一些js的类库,当我们发布自己产品的时候,不得不把源代码分发出去:但是这样就会泄露自己的代码.今天使用了一下Jasob感觉不错: 使用Jasob,我们的JavaSc ...

  2. windows server 2008性能测试出现大量time_wait

    netstat -an | find "TCP" /C netstat -an | find "TIME_WAIT" /C taskkill /im mmdrv ...

  3. Codeforces 1017F The Neutral Zone 数论

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1017F.html 题目传送门 - CF1017F 题意 假设一个数 $x$ 分解质因数后得到结果 $x=p ...

  4. BZOJ1396 识别子串 字符串 SAM 线段树

    原文链接http://www.cnblogs.com/zhouzhendong/p/9004467.html 题目传送门 - BZOJ1396 题意 给定一个字符串$s$,$|s|\leq 10^5$ ...

  5. springmvc 无法访问静态资源

    没有配置<mvc:resources location="/" mapping="/**"/> <?xml version="1.0 ...

  6. 065 updateStateByKey的函数API

    一:使用场景 1.应用场景 数据的累加 一段时间内的数据的累加 2.说明 每个批次都输出自己批次的数据, 这个时候,可以使用这个API,使得他们之间产生联系. 3.说明2 在累加器的时候,起到的效果和 ...

  7. 从函数式编程到Ramda函数库(一)

    函数式编程是种编程方式,它将电脑运算视为函数的计算.函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值).和指令式编程相比, ...

  8. ThreadPoolExecutor 入参 corePoolSize 和 maximumPoolSize 的联系

    前言 我们可以通过 java.util.concurrent.ThreadPoolExecutor 来创建一个线程池: new ThreadPoolExecutor(corePoolSize, max ...

  9. Django 学习第十天——状态保持及表单

    状态保持: 1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 2.客户端与服务器端的一次通信,就是一次会话实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 3.存 ...

  10. Xamarin Essentials教程陀螺仪Gyroscope

    Xamarin Essentials教程陀螺仪Gyroscope   陀螺仪是用来检测设备在X.Y.Z轴上所旋转的角速度.应用程序通过陀螺仪可以获取设备在各个方向的转动角速度,可以实现更为丰富的控制功 ...