gpt4 book ai didi

ruby - 重用 Ruby 中线程之间的连接/替换 Net::HTTP::Persistent

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:52 26 4
gpt4 key购买 nike

我正在运行一个多线程守护进程,其中一个 ruby​​ Mechanize 实例(包含一个 Net::HTTP::Persistent 对象)可能被多个线程之一使用和运行。我遇到了很多问题,因为 Net::HTTP::Persistent 为运行它的每个线程打开了一个新连接,所以如果我有 50 个线程,我最终打开的连接数是它的 50 倍我需要!我已经尝试子类化和修补 Net::HTTP::Persistent 以将其连接信息存储为其类的一部分而不是在 Thread.current 中,但后来我不断得到

too many connection resets (due to Broken pipe - Errno::EPIPE)

到处都是……有什么想法吗?有谁知道我可以使用 Net::HTTP::Persistant 的替代库,并希望可以轻松地修补 Mechanize?

最佳答案

问题是,如果你从另一个线程访问一个 Net::HTTP::Persistent 对象,而那个对象在某个东西的中间,那个线程要么必须阻塞(停止执行并等待对象做它需要做的事情),或者创建一个新对象并弄乱它。使用线程,你可能在 HTTP 请求的中间(原谅我,我在这里做假设),突然间,另一个线程想要使用相同的连接创建一个 HTTP 请求,这会破坏一切(可能是为什么你遇到了连接重置问题)。

如果您真的想要线程,您的选择是打开任意数量的连接,或者等待一个打开的连接以便您可以使用它。

关于ruby - 重用 Ruby 中线程之间的连接/替换 Net::HTTP::Persistent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167445/

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