Python 分布式进程如何交换数据?

我知道多进程,也知道多进程交换数据用队列Queue和管道Pipes
问题一:
队列和管道是在内存中交换数据?还是在文件中交换数据?win和linux上实现会有不同吗?
问题二:
一般的多进程队列和管道的用法:
#在一个python文件中指定,然后把队列作为参数传入进程函数:
q=Queue()
pw=Process(target=write,args=(q,))
pr=Process(target=read,args=(q,))
而分布式进程的意思是说(我自己说的):两个py文件
test1.py
test2.py
分别运行其(不是同时运行):
#15:37
pythontest1.py
#15.38
pythontest2.py
这样也是两个进程,只是运行在不同的python窗口,他们怎么交换数据?这用管道和队列就不能实现了吧我也不知道我为啥会问这样的问题...原来我的做法是,直接用tcp把它们连起来,完全够用,还可以通过网络分布出去但是我就想直接在本地,没必要用网络吧,能不能直接让它两在内存中就交换数据?这样岂不美哉233谢谢
ABOUTYOU
浏览 583回答 2
2回答

波斯汪

test1和test2共享内存通信方式:test1向redis的key1中写入数据,test2读取redis的key1数据,用于流式传输,与队列不同,无法判断重读或未读test1和test2队列通信方式:老老实实用socket吧,反正多文件的进程间你也没办法加入原子锁

拉丁的传说

我觉得有两种解决方案:1.把Queue注册到网络frommultiprocessing.managersimportBaseManager#发送任务的队列:task_queue=queue.Queue()#从BaseManager继承的QueueManager:classQueueManager(BaseManager):pass#把Queue都注册到网络上,callable参数关联了Queue对象:QueueManager.register('get_task_queue',callable=lambda:task_queue)#绑定端口5000,设置验证码'abc':manager=QueueManager(address=('',5000),authkey=b'abc')2.通过数据库如redis交互。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript