Twisted 和 libtorrent - 我需要担心阻塞吗?

Posted

技术标签:

【中文标题】Twisted 和 libtorrent - 我需要担心阻塞吗?【英文标题】:Twisted and libtorrent - do I need to worry about blocking? 【发布时间】:2013-03-04 10:30:57 【问题描述】:

我正在研究使用 twisted 构建多协议应用程序。其中一种协议是 bittorrent。由于 libtorrent 是一个相当完整的实现,它的 python 绑定似乎是一个不错的选择。 现在的问题是:

将 libtorrent 与 twisted 一起使用时,是否需要担心阻塞? libtorrent 网络层(使用 boost.asio,一个异步网络循环)是否会以任何方式干扰扭曲的 epoll? 我应该在线程中运行 libtorrent 会话还是针对多进程应用程序设计?

【问题讨论】:

【参考方案1】:

我或许能够回答其中一些问题。

所有的 libtorrents 逻辑,包括网络和磁盘 I/O 都是在单独的线程中完成的。所以,总的来说,“阻塞”的关注度并没有那么大。假设您的意思是 libtorrent 函数不会立即返回。

某些操作保证立即返回,函数不返回任何状态或信息。但是,确实返回某些内容的函数必须与 libtorrent 主线程同步,并且如果它处于重负载下(尤其是在具有不变检查且没有优化的调试模式下构建时),这种同步可能会很明显,尤其是在制作许多它们时,并且经常。

有一些方法可以使用本质上更加异步的 libtorrent,并且正在努力尽量减少使用同步功能的需求。例如,可以订阅 torrent 状态更新,而不是单独查询所有 torrent 的状态。异步通知通过 pop_alerts() 返回。

是否会干扰twisted的epoll;我不能肯定,但似乎不太可能。

我认为没有太多需要通过另一层线程与 libtorrent 交互,因为所有工作都已在单独的线程中完成。

【讨论】:

以上是关于Twisted 和 libtorrent - 我需要担心阻塞吗?的主要内容,如果未能解决你的问题,请参考以下文章

libtorrent-rasterbar 和 QGuiApplication 导致内存损坏

libtorrent 内置跟踪器 [关闭]

从 libtorrent 中的 url 种子低速下载

使用 libtorrent (rasterbar) 获取上传活动警报

libtorrent 无法使用 VS2005 构建

pip install python-libtorrent==1.1.0 在 linux 上失败