首页 > 解决方案 > python: gevent 的 monkey.patch_all 使 subprocess.check_all 慢得多

问题描述

这是测试脚本:

from gevent.monkey import patch_all; patch_all()
import subprocess
from subprocess import STDOUT                                                                        
from tempfile import NamedTemporaryFile
import datetime

with NamedTemporaryFile() as f:
    print('Subprocess call at {}'.format(datetime.datetime.now()))
    ret = subprocess.check_call(['iptables', '-t', 'mangle', '-L', '-vx'], stdout = f, stderr = STDOUT)
    print('Subprocess call end at {}'.format(datetime.datetime.now()))

使用patch_all时,执行时间通常约为 600 毫秒,而没有时patch_all仅为约 30 毫秒。因此,我想知道是什么导致了这种情况发生,我能做些什么来减少延迟?

标签: pythonsubprocessgevent

解决方案


好吧,看来这本身就是一个已知问题gevent也许我唯一能做的就是将其回滚到1.1a1或等待1.3b2. 另一种解决方案可能是传递subprocess=Falsepatch_all()


推荐阅读