题:
我可以在Windows上以高效的方式将多处理模块与gevent一起使用吗?
场景:
我有一个基于gevent的Python应用程序在Windows上进行异步I/O. 该应用程序主要受I/O限制,但也存在CPU负载较高的峰值.此应用程序需要通过其stdin和stdout控制控制台应用程序.我无法修改此控制台应用程序,用户将能够使用自己的自定义应用程序,只修复基于文本(行)的通信协议.
我有一个使用子进程和线程的工作实现,但我宁愿将整个基于子进程的通信代码与这些线程一起移动到一个单独的进程中,以将主应用程序转回单线程.我打算为此使用多处理模块.
事先阅读:
我一直在网上搜索并阅读一些源代码,所以我知道多处理模块在Windows上使用基于命名管道的Pipe实现.一对multiprocessing.queue.Queue对象将用于与第二个Python进程通信.这些队列基于该管道实现,例如IPC将通过命名管道完成.
关键问题是,调用传入的Queue的get方法是否会阻止gevent的主循环.该方法有一个超时,所以我可以把它变成一个带有小超时的循环,但这不是一个好的解决方案,因为它会在很短的时间内阻止gevent,从而损害其低I/O延迟.
我也对如何规避在Windows上使用管道的整个问题的建议持开放态度,这已知很难,有时甚至是脆弱的.我不确定在Windows上是否可以使用基于共享内存的IPC.也许我可以用一种允许使用网络套接字与子进程通信的方式来包装控制台应用程序,这已知可以与gevent一起使用.
如果可能的话,请不要质疑我的主要用例.谢谢.
题:
如何在QtWebKit中增加每个主机6个连接的默认限制?
使用案例:
我有一个PySide应用程序显示的多个QtWebKit(QWebView)窗格.(PyQt也可以以相同的方式工作.)每个主机6个连接的默认连接限制很快成为障碍,因为持久HTTP连接(Comet)用于每个Web窗格的数据通信.解决方案是增加此限制,但我找不到此API.
asynchronous ×1
gevent ×1
pyqt ×1
pyside ×1
python ×1
qt ×1
subprocess ×1
webkit ×1
windows ×1