在上个月,当我们试图使用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)与远程计算机共享队列时出现管道中断...相关推荐

  1. 第十章、python字符串操作与with语句及上下文管理器------字符串的匹配与查找

    目录 10.1 python的字符串的操作 10.1.1 python的字符串的匹配与查找 (1)实例 (2)find(或rfind).index(或rindex)与match.search.find ...

  2. python教学查询,python基础教程之查询集 QuerySet和管理器Manager

    查询集 QuerySet 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据. ...

  3. python无师自通配套资源_Python Tkinter Pack布局管理器(超级详细,看了无师自通)...

    GUI 编程就相当于小孩子搭积木,每个积木块应该放在哪里,每个积木块显示为多大,也就是对大小和位置都需要进行管理,而布局管理器正是负责管理各组件的大小和位置的.此外,当用户调整了窗口的大小之后,布局管 ...

  4. Python中必须知道的知识点:上下文管理器

    在Python中让自己创建的函数.类.对象支持with语句,就实现了上线文管理协议.我们经常使用with open(file, "a+") as f:这样的语句,无需手动调用f.c ...

  5. python pip是什么的简写_Python包管理器pip

    [安装setuptools和pip] 玩Python不能没有setuptools和pip.这里使用pip提供的安装脚本,自动安装setuptools和pip.wget https://bootstra ...

  6. python快速编程入门课本中的名片管理器_Python快速编程入门

    内容简介 Python是一种面向对象.解释性的高级程序语言,它已经被应用在众多领域,包括Web开发.操作系统管理.服务器运维的自动化脚本.科学计算.桌面软件.服务器软件(网络软件).游戏等方面. 本书 ...

  7. python快速编程入门课本中的名片管理器_python优雅操作-实现名片管理系统

    python的确是适合零基础的编程爱好者学习的语言,python的程序能看懂,但是很难去实现,这是每一个学习python的新手们基本上都会遇到的难题.好记性不如烂笔头,把知识运用到实战项目中,这是最好 ...

  8. python自动化运维——系统批量运维管理器pexpect详解

    pexpect可以理解成Linux下的expect的Python封装,通过pexpect可以实现对ssh.ftp.passwd.telnet等命令进行自动交互,来达到自动化的目的.比如可以模拟FTP登 ...

  9. python快速编程入门课本中的名片管理器_python打造名片管理系统,小白入门最佳练手项目!...

    名片管理小系统 名片信息包含姓名.电话.QQ; 系统功能:增加用户信息.修改信息.删除信息.查询信息.退出系统.打印名片: 操作为:用户每次都可以进行选择,直到用户选择退出系统为止: 学习Python ...

最新文章

  1. 虚指针的用法(原出处//http://blog.csdn.net/haoel/article/details/1948051)
  2. java线程池的使用学习
  3. 深入Eureka/Feign/Hystrix原理学习(1)
  4. 如何自建appender扩展Log4j框架
  5. CPU取指到发出控制、微程序控制原理详细过程
  6. PAT 7-14 公路村村通
  7. Cortex-M3 (NXP LPC1788)之GPIO
  8. html网页设计字体变色,网页制作怎么改变字体颜色
  9. 用Bat文件创建桌面快捷方式
  10. 可能是全网最全的解决无法创建视频捕捉过滤器问题?
  11. 把数字翻译成英文声明.C语言,如何把数字翻译成英文
  12. windowsServer安装sqlServer2008
  13. python:如何删除一数组中包含7和7的倍数的数
  14. html+css 模仿制作百度注册页面
  15. 什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?
  16. 卡特兰数列(Catalan )
  17. Cocos Creator 3.2 中实现2D地图3D人物45度角RPG游戏效果笔记(摄像机设置方案)
  18. 图网络:从数据处理到DGL模型构建(GCN, GraphSAGE, RGCN)
  19. 作为程序员的你在外行人眼里是一个怎样的群体?
  20. mysql去重并写入新表

热门文章

  1. es6 语法 (Decorator)
  2. Bootstrap定制开发
  3. linux ubuntu 关于vim得一些基本命令
  4. 20180813-20180817
  5. 最全Pycharm教程(10)——Pycharm调试器总篇
  6. 一起动手打造个人娱乐级linux
  7. Linux自动化安装cobbler
  8. Jquery提交form表单
  9. c/c++编码规范(2)--作用域
  10. hdu2115: I Love This Game