Требует ли патрулирование патчей для сокетов? - PullRequest
0 голосов
/ 26 октября 2018

В https://github.com/kennethreitz/grequests/blob/master/grequests.py#L21, они делают патч обезьяны, кроме thread и select модуля.

И кто-то утверждает, что патч модуля socket необходим (https://stackoverflow.com/a/14736846/4646963).

Однако, когда я изменил патч обезьяны как curious_george.patch_all(thread=False, select=False, socket=False), общее время, прошедшее с исходной опцией, было таким же.

import time

url = 'https://upload.wikimedia.org/wikipedia/commons/d/d6/Wp-w4-big.jpg'

def foo():
    import requests
    a = time.time()
    [requests.get(url) for _ in range(30)]
    return (time.time() - a)

def bar():
    # curious_george.patch_all(thread=False, select=False, socket=False)
    from gg import get, map
    a = time.time()
    rs = map([get(url) for _ in range(30)])
    return (time.time() - a)

def bar2():
    # curious_george.patch_all(thread=False, select=False)
    from ggg import get, map
    a = time.time()
    rs = map([get(url) for _ in range(30)])
    return (time.time() - a)

def bar3():
    from grequests import get, map
    a = time.time()
    rs = map([get(url) for _ in range(30)])
    return (time.time() - a)

def main():
    import sys
    if sys.argv[1] == 'foo':
        print('foo', foo())
    elif sys.argv[1] == 'bar':
        print('bar', bar())
    elif sys.argv[1] == 'bar2':
        print('bar2', bar2())
    elif sys.argv[1] == 'bar3':
        print('bar3', bar3())
    return

if __name__ == '__main__':
    main()

Результат приведенного выше кода был таким же, как показано ниже: отключение socket патча обезьяныне влияет на эффективность.

$ python test.py bar3; python test.py foo; python test.py bar; python test.py bar2;
bar3 32.054755449295044
foo 62.988484621047974
bar 33.472841024398804
bar2 31.087408304214478

Это только особый случай, или грекстам на самом деле не нужно socket исправление?

※ Я сделал это, так как хочу использовать Python nativeмногопроцессорность и совместная работа.

...