python基础学习日志day10-进程间数据通信

一:进程间数据交换方法

  不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用以下方法:

  1)Queue,使用方法跟threading里的queue差不多

  

# -*- coding:utf-8 -*-
__author__ = ‘shisanjun‘

from multiprocessing import Process,Queue
import threading
import queue

# def run(q):
#     q.put([42,None,"hello"])
#
#
# if __name__=="__main__":
#
#     q=Queue()
#     p=Process(target=run,args=(q,))
#     p.start()
#     print(q.get())

"""
正常进程间传递,把query当做参数传给子进程
想当于父进程克隆了一份数据给子进程
其他是两个q父进程q序列化保存在某个位置,子进程q在反序列化
"""

def f():
    q.put([42,None,"hello"])

# if __name__=="__main__":
#
#     q=queue.Queue()
#     p=threading.Thread(target=f,)
#     p.start()
#     print(q.get())

"""
线程共享内存,所以可以访问q
"""

# if __name__=="__main__":
#
#     q=queue.Queue()
#     p=Process(target=f,)
#     p.start()
#     print(q.get())
"""
 name ‘q‘ is not defined
 主进程和子进程不能共享内存,所以不能用q
"""

if __name__=="__main__":

    q=queue.Queue() #线程队列
    p=Process(target=f,args=(q,))
    p.start()
    print(q.get())

"""
TypeError: can‘t pickle _thread.lock objects
往线程里面放数据,他没有序列化,往进程里放数据
"""
时间: 2024-10-13 20:44:55

python基础学习日志day10-进程间数据通信的相关文章

python基础学习日志day10-

原文http://www.cnblogs.com/alex3714/articles/5876749.html 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. 一 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对

python基础学习日志day5-各模块文章导航

python基础学习日志day5---模块使用 http://www.cnblogs.com/lixiang1013/p/6832475.html python基础学习日志day5---time和datetime模块 http://www.cnblogs.com/lixiang1013/p/6848245.html python基础学习日志day5---random模块http://www.cnblogs.com/lixiang1013/p/6849162.html python基础学习日志da

python基础学习日志day9--线程队列queue

一:线程queu作用 Python中,queue是线程间最常用的交换数据的形式. 队列两个作用:一个是解耦,一个是提高效率 二:语法 1)队列的类 class queue.Queue(maxsize=0) #先入先出 class queue.LifoQueue(maxsize=0) #last in fisrt out  class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列 优先级队列的构造函数.maxsize可以放置在队列中的项的最大个数.

python基础学习日志day5---logging模块

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用. 最简单用法 1 2 3 4 5 6 7 8 import logging logging.warning("user [alex] attempt

python基础学习日志day5--subprocess模块

可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 commands.*      --废弃,3.x中被移除 以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能 call 父进程等待子进程完成返回退出信息(returncode,相当于Linux exit code) 执行命令,返回状态码,shell=True是表示

python基础学习日志day9--线程event

一:线程event作用 Python提供了Event对象用于线程间通信,它是线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号结束. Event对象实现了简单的线程通信机制,它提供了设置信号,清楚信号,等待等用于实现线程间的通信. 官方解释 event是一个简单的同步对象:event表示内部标志和线程.可以等待标志设置,或设置或清除标志本身. 二:event使用 1)event = threading.Event() 申明event实例 2)event.wait().线程设置等待标志

python基础学习日志day10-事件驱动模型

论事件驱动与异步IO 原文:http://www.cnblogs.com/alex3714/articles/5248247.html常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收到一个请求,放入一个事件列表,让主进程通过非阻塞I/O方式来处理请求 上面的几种方式,各有千秋, 第(1)中方法,由于创建新的进程的开销比较大,所以,会导致服务器性能比较差,但实现比较简单.

python基础学习日志day8-异常处理

一.异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面. 1)常用方式: try: pass except Exception as e: pass 一直尝试try中的代码,如果遇到错误和except中异常相同,就执行except中代码,如果和except没有相同,还是会抛出异常 # -*- coding:utf-8 -*- __author__ = 'shisanjun' names=['1','2','3'] data={} try:

python基础学习日志day7-类的反射

1)python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr, 改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. # -*- coding:utf-8 -*- __author__ = 'shisanjun' class Foo(object): def __init__(self): self.name="s" def func(self): return 'func' obj=Foo() #