为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

test1和test2共享内存通信方式:test1向redis的key1中写入数据,test2读取redis的key1数据,用于流式传输,与队列不同,无法判断重读或未读
test1和test2队列通信方式:老老实实用socket吧,反正多文件的进程间你也没办法加入原子锁
                            
查看完整回答
反对 回复 2019-05-23
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

我觉得有两种解决方案: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交互。
                            
查看完整回答
反对 回复 2019-05-23
  • 2 回答
  • 0 关注
  • 582 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信