进程间通信
2018-06-17 23:47:00来源:未知 阅读 ()
参考博客:http://blog.csdn.net/HeatDeath/article/details/72844120
一、前言
线程存在于进程中,对于同一个进程内的线程,该进程内的资源是共享的,各个线程可以竞争获取。而不同的进程有独立的内存空间,它们之间不能直接相互访问,那么进程和进程间如何相互通信呢?
二、进程间通信
2.1 Queue()
在线程中有个队列queue,典型的应用在生产者和消费者模型中。而Queue()则用于进程间通信,使用和线程queue差不多。
from multiprocessing import Process, Queue import os import time import random # 写数据进程执行的代码: def write(x): print('Process to write: %s' % os.getpid()) for value in ['A', 'B', 'C']: print('Put %s to queue...' % value) x.put(value) time.sleep(random.random()) # 读数据进程执行的代码: def read(x): print('Process to read: %s' % os.getpid()) while True: value = x.get() print('Get %s from queue.' % value) if __name__ == '__main__': # 父进程创建Queue,并传给各个子进程: q = Queue() pw = Process(target=write, args=(q,)) pr = Process(target=read, args=(q,)) # 启动子进程pw,写入: pw.start() # 启动子进程pr,读取: pr.start() # 等待pw结束: pw.join() # pr进程里是死循环,无法等待其结束,只能强行终止: pr.terminate()
2.2 Pipe()
Pipe()函数返回一对由管道连接的连接对象,默认情况下是双工(双向)。
Pipe()返回的两个连接对象代表管道的两端。 每个连接对象都有send()和recv()方法(等等)
rom multiprocessing import Process, Pipe def f(conn): conn.send([1, 2, 3]) # 子进程发送 while True: print('receive from parent process:', conn.recv()) # 子进程接收 if __name__ == '__main__': parent_conn, child_conn = Pipe() # 定义连接对象 p = Process(target=f, args=(child_conn,)) p.start() print('receive from child process:', parent_conn.recv()) parent_conn.send('123') p.terminate() # 输出 receive from child process: [1, 2, 3] receive from parent process: 123
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Python连载30-多线程之进程&线程&线程使用 2019-08-13
- python多线程同步实例分析 2019-08-13
- xpath+多进程爬取八零电子书百合之恋分类下所有小说。 2019-08-13
- xpath+多进程爬取全书网纯爱耽美类别的所有小说。 2019-08-13
- 进程相关 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash