gpt4 book ai didi

python - gevent 与其他包的兼容性

转载 作者:行者123 更新时间:2023-11-28 17:41:41 30 4
gpt4 key购买 nike

简而言之,我的问题是:我怎么知道某个特定的 Python 包何时与 gevent 兼容(至少与 gevent.monkey.patch_all 兼容)?

其实我想知道是否http-parser库与 gevent 兼容(它是否会在某处阻止所有 eventlet),但有一个通用的答案会更好。

最佳答案

如果您要使用的库是使用 gevent.monkey.patch_all() 构建的补丁,那么它将可能工作。

patch_all() 将使标准库 与 gevent 配合得很好。例如,socket 模块是标准库的一部分,由 patch_all()patch_socket() 打补丁,因此任何使用套接字构建的库 都应该可能工作

它看起来像 http-parser使用 socket 模块,因此应该与 gevent 兼容。唯一确定的方法就是测试。

这是一个示例测试,是从 http-parser github 的示例实现的:

from gevent.monkey import patch_all; patch_all()
from gevent.socket import create_connection
import gevent
from http_parser.http import HttpStream
from http_parser.reader import SocketReader

def worker(n):
try:
s = create_connection(('gunicorn.org', 80))
s.send("GET / HTTP/1.1\r\nHost: gunicorn.org\r\n\r\n")
r = SocketReader(s)
p = HttpStream(r)
print "Worker {}, headers length: {}".format(n, len(p.headers()))
finally:
s.close()

if __name__ == '__main__':
jobs = [gevent.spawn(worker, job_no) for job_no in range(10)]
gevent.joinall(jobs)

哪些输出:

(test)msvalkon@Lunkwill:/tmp$ python test_http_parser.py 
Worker 8, headers length: 4
Worker 1, headers length: 4
Worker 5, headers length: 10
Worker 2, headers length: 10
Worker 9, headers length: 10
Worker 4, headers length: 10
Worker 3, headers length: 10
Worker 6, headers length: 10
Worker 7, headers length: 10
Worker 0, headers length: 10

似乎http-parser符合 gevent。

关于python - gevent 与其他包的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278482/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com