多处理gevent扩展

geventmp的Python项目详细描述


警告

嗨,松鼠!!!

这个代码是非常实验性的(pre-pre-alpha)。很少有测试,很多东西都在变化, 有些平台根本不起作用。

不要在生产中使用。这段代码可能会使你的服务器崩溃,使你的公司破产,烧毁你的房子,变得卑鄙 给你的小狗。你被警告了。

问题

由于内部实现,多处理mp)与Gevent一起使用是不安全的,即使monkey-patched。 也就是说,在mp中使用os信号量原语和进程间io将导致 循环到stall/deadlock/block(具体问题取决于cpython的版本)。

溶液

Geventmpgee vent em pee,而不是gee vent tee em pee)是monkey patch子系统的扩展插件。 共Gevent。与monkey patch子系统的其他部分一样,这个过程相当清楚:

  1. 确定阻塞发生的所有位置以及阻塞可能导致循环暂停的位置。
  2. 如果文件描述符上发生阻塞(fd),请尝试将文件描述符从阻塞转换为非阻塞 (sockets/pipes/fifos,有时甚至是文件,很少是适当的),并用它们的 gevent非阻塞等价物。
  3. 如果阻塞发生在不支持非阻塞访问的python/os原语中,因此无法进行通风, 使用基于本机线程池的包装器包装对该原语的所有阻塞访问,并将其称为一天(同时完全 了解原始访问延迟将增加,原始性能可能因此受到影响)。
  4. 如果你真的很勇敢并且有很多空闲时间,完全替换一个标准的阻塞python 非基于fd的原语,其实现基于基于fd的os原语(例如posix信号量=>; Linux eventfd-based semaphore for kernels > 2.6.30)。
  5. 由于在mp中启动了不同的进程,所以要弄清楚如何、何时以及是否monkey patch生成/分叉 子孙后代。

安装

包托管在PyPi

对于稳定版本:

pip install geventmp

对于不稳定版本:

pip install --pre geventmp

一旦安装,geventmp将在下面的节中默认激活。

frommonkeyimportpatch_allpatch_all()

如果希望geventmp在默认情况下不激活,请不要安装它或显式禁用它:

frommonkeyimportpatch_allpatch_all(geventmp=False)

就这样-到目前为止没有其他标志、设置、属性或配置值。

支持的平台

注意

所有的支持声明可能根本不是真实的。欢迎你来做实验。请参阅顶部的警告。

  • Linux,可能是达尔文。
  • cpython 2.7,3.5,3.6,3.7…也许吧。

待办事项

  1. 一旦我们知道Gevent Issue #1448是如何进行的,就实现ci/cd 外带。
  2. 对cpython 2.7、3.5、3.6、3.7、3.8、pypys等进行测试。
  3. 尽可能地修补窗口。
  4. 如果需要,测试并修复达尔文。
  5. 许多应用程序使用Billiard进行多处理,而不是使用常用的python 包裹。如果检测到猴子打台球。

联系我们

Bug TrackerGitter上发布反馈和问题, 以及Twitter (@karelleninc)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ActiveMQ 5.9.0、Glassfish 3.1.2和MDB用于长时间的消息处理   从main调用的对象数组的Java字符串表示形式   java如何在iText 7中为泰国字母上方的双标记设置GPO   编译如果Java6工件是用Java6、7或8编译的,这有关系吗?   image Java KeyListener未检测到键盘输入   java找不到符号(构造函数)   java如何使Kafka使用者从特定主题分区读取Spring Boot   Java readLine()返回null   从CSV文件计算值时出现java系统错误   java如何避免处理程序。被调用后延迟(可运行运行)?   Java Do和While验证   java如何访问父类型的ArrayList中的子方法?   java如何使用Deepfirstsearch算法获得最高级别的搜索   xml使用SAX解析器Java正确构建字符串   Android片段中的java Toast显示空指针expn   如何在java中将多个文件合并到另一个新文件中?   java在运行时在JVisualVM中更改应用程序的标题   javajavax。命名。NoInitialContextException:需要在环境或sys中指定类名