我知道多进程,也知道多进程交换数据用队列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吧,反正多文件的进程间你也没办法加入原子锁
拉丁的传说
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交互。
添加回答
举报
0/150
提交
取消