我正在使用Locust框架对系统进行负载测试。我的项目包含Locust源文件(未列出为依赖项),因为我必须对源代码进行一些必要功能的修改。不幸的是,在蝗虫/核心中,以下代码被称为
from gevent import GreenletExit, monkey
from six.moves import xrange
monkey.patch_all()
在项目的其他部分(蝗虫以外-但仍依赖于蝗虫的本地修改版本),我尝试使用多处理模块:
from multiprocessing import Pool
def dummy_func
pool = Pool(4) #gets hung up here -- likly because of patched sockets in os module
results = pool.map(irrelevant_func, irrelevant_data)
问题是 monkey.patch_all()修补了 multiprocessing 模块依赖项(例如os模块),使其无法使用。我无法删除对Locust必需的monkey.patch_all()调用,但是我需要访问多处理模块的原始版本(及其所有依赖项),以便保留其功能。
TLDR:Gevent的MonkeyPatching导致Multiprocessing Pool挂起(不会初始化),因为它修补了os模块套接字-我如何获得访问未打补丁的os模块的Multiprocessing版本以及访问已打补丁的os的gevent版本模块
我对类似错误的研究