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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
往线程里面放数据,他没有序列化,往进程里放数据
"""

 

以上是关于python基础学习日志day10-进程间数据通信的主要内容,如果未能解决你的问题,请参考以下文章

python基础学习日志day10-

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

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

python基础学习日志day10-SelectPollEpoll异步IO

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

Python之路,day11-Python基础