python manager与basemanager_使用Python多处理管理器(BaseManager/SyncManager)与远程计算机共享队列时出现管道中断...
在上个月,当我们试图使用Python2.6.x多处理包在几个不同的(linux)计算机之间共享队列时,我们遇到了一个持久的问题。我也直接向Jesse Noller提出了这个问题,因为我们还没有找到任何解释StackOverflow、Python文档、源代码或其他在线问题的东西。
我们的工程师团队还没有解决这个问题,我们已经向python用户组中的很多人提出了这个问题,但没有效果。我希望有人能给我一些启示,因为我觉得我们做了一些不正确的事情,但离问题太近了,看不出它是什么。
症状如下:Traceback (most recent call last):
File "/var/django_root/dev/com/brightscope/data/processes/daemons/deferredupdates/servers/queue_server.py", line 65, in get_from_queue
return queue, queue.get(block=False)
File "", line 2, in get
File "/usr/local/lib/python2.6/multiprocessing/managers.py", line 725, in _callmethod
conn.send((self._id, methodname, args, kwds))
IOError: [Errno 32] Broken pipe
(我展示了代码在共享队列对象上调用queue.get()的位置,该对象由扩展SyncManger的管理器托管)。
这个问题的特殊之处在于,如果我们在一台机器上连接到这个共享队列(我们称之为machine A),即使是从许多并发进程,我们似乎也不会遇到问题。只有当我们从其他机器(我们称之为machines B and C)连接到队列(同样,使用扩展了多处理同步管理器并且当前没有添加任何附加功能的类)并在队列内外运行大量项目时,我们才会遇到问题。
这就好像python的多处理包处理本地连接(即使它们仍然使用相同的manager.connect()连接方法)的方式与machine A相同,但是当至少从machines B or C中的一个同时进行远程连接时,我们会得到断管错误。
在我的团队所做的所有阅读中,我们认为问题与锁定有关。我们认为也许不应该使用Queue.Queue,而应该使用multiprocessing.Queue,但是我们进行了切换,问题仍然存在(我们还注意到SyncManager自己的共享队列是Queue.Queue的一个实例)。
我们正在讨论如何调试这个问题,因为它很难重现,但确实相当频繁(如果我们插入和.get()队列中的许多项,每天会发生很多次)。
我们创建的方法get_from_queue尝试用随机睡眠间隔从队列中重试获取该项约10次,但似乎如果失败一次,它将失败10次(这使我相信,到管理器的.register()和.connect()可能没有提供到服务器的另一个套接字连接,但我无法确认这可以通过阅读文档或查看Python内部源代码来实现)。
有谁能提供一些我们可能看到的地方,或者我们如何跟踪实际发生的事情?
如果管道损坏,我们如何使用multiprocessing.BaseManager或multiprocessing.SyncManager启动新连接?
我们怎样才能从一开始就防止管道破裂呢?
python manager与basemanager_使用Python多处理管理器(BaseManager/SyncManager)与远程计算机共享队列时出现管道中断...相关推荐
- 第十章、python字符串操作与with语句及上下文管理器------字符串的匹配与查找
目录 10.1 python的字符串的操作 10.1.1 python的字符串的匹配与查找 (1)实例 (2)find(或rfind).index(或rindex)与match.search.find ...
- python教学查询,python基础教程之查询集 QuerySet和管理器Manager
查询集 QuerySet 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据. ...
- python无师自通配套资源_Python Tkinter Pack布局管理器(超级详细,看了无师自通)...
GUI 编程就相当于小孩子搭积木,每个积木块应该放在哪里,每个积木块显示为多大,也就是对大小和位置都需要进行管理,而布局管理器正是负责管理各组件的大小和位置的.此外,当用户调整了窗口的大小之后,布局管 ...
- Python中必须知道的知识点:上下文管理器
在Python中让自己创建的函数.类.对象支持with语句,就实现了上线文管理协议.我们经常使用with open(file, "a+") as f:这样的语句,无需手动调用f.c ...
- python pip是什么的简写_Python包管理器pip
[安装setuptools和pip] 玩Python不能没有setuptools和pip.这里使用pip提供的安装脚本,自动安装setuptools和pip.wget https://bootstra ...
- python快速编程入门课本中的名片管理器_Python快速编程入门
内容简介 Python是一种面向对象.解释性的高级程序语言,它已经被应用在众多领域,包括Web开发.操作系统管理.服务器运维的自动化脚本.科学计算.桌面软件.服务器软件(网络软件).游戏等方面. 本书 ...
- python快速编程入门课本中的名片管理器_python优雅操作-实现名片管理系统
python的确是适合零基础的编程爱好者学习的语言,python的程序能看懂,但是很难去实现,这是每一个学习python的新手们基本上都会遇到的难题.好记性不如烂笔头,把知识运用到实战项目中,这是最好 ...
- python自动化运维——系统批量运维管理器pexpect详解
pexpect可以理解成Linux下的expect的Python封装,通过pexpect可以实现对ssh.ftp.passwd.telnet等命令进行自动交互,来达到自动化的目的.比如可以模拟FTP登 ...
- python快速编程入门课本中的名片管理器_python打造名片管理系统,小白入门最佳练手项目!...
名片管理小系统 名片信息包含姓名.电话.QQ; 系统功能:增加用户信息.修改信息.删除信息.查询信息.退出系统.打印名片: 操作为:用户每次都可以进行选择,直到用户选择退出系统为止: 学习Python ...
最新文章
- 虚指针的用法(原出处//http://blog.csdn.net/haoel/article/details/1948051)
- java线程池的使用学习
- 深入Eureka/Feign/Hystrix原理学习(1)
- 如何自建appender扩展Log4j框架
- CPU取指到发出控制、微程序控制原理详细过程
- PAT 7-14 公路村村通
- Cortex-M3 (NXP LPC1788)之GPIO
- html网页设计字体变色,网页制作怎么改变字体颜色
- 用Bat文件创建桌面快捷方式
- 可能是全网最全的解决无法创建视频捕捉过滤器问题?
- 把数字翻译成英文声明.C语言,如何把数字翻译成英文
- windowsServer安装sqlServer2008
- python:如何删除一数组中包含7和7的倍数的数
- html+css 模仿制作百度注册页面
- 什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?
- 卡特兰数列(Catalan )
- Cocos Creator 3.2 中实现2D地图3D人物45度角RPG游戏效果笔记(摄像机设置方案)
- 图网络:从数据处理到DGL模型构建(GCN, GraphSAGE, RGCN)
- 作为程序员的你在外行人眼里是一个怎样的群体?
- mysql去重并写入新表