python:gevent的monkey.patch_all使subprocess.check_all慢得多

时间:2018-05-02 14:45:00

标签: python subprocess gevent

以下是测试脚本:

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毫秒。因此,我想知道是什么导致这种情况发生,我该怎么做才能减少延迟?

1 个答案:

答案 0 :(得分:0)

好吧,这似乎是gevent 1.1a1本身。也许我唯一能做的就是将其回滚到1.3b2或等待subprocess=False。另一种解决方案可能是将patch_all()传递给outer1