我正在研究使用 twisted 构建多协议应用程序。其中一种协议是 bittorrent。由于 libtorrent 是一个相当完整的实现,它的 python 绑定似乎是一个不错的选择。现在的问题是:
- 当使用 libtorrent with twisted 时,我需要担心阻塞吗?
- libtorrent 网络层(使用 boost.asio,一个异步网络循环)是否会以任何方式干扰扭曲的 epoll?
- 我应该在线程中运行 libtorrent 会话还是针对多进程应用程序设计?
我正在研究使用 twisted 构建多协议应用程序。其中一种协议是 bittorrent。由于 libtorrent 是一个相当完整的实现,它的 python 绑定似乎是一个不错的选择。现在的问题是:
我也许能够为其中一些问题提供答案。
所有的 libtorrents 逻辑,包括网络和磁盘 I/O 都是在单独的线程中完成的。所以,总的来说,“阻塞”的关注度并没有那么大。假设您的意思是 libtorrent 函数不会立即返回。
有些操作保证立即返回,函数不返回任何状态或信息。但是,确实返回某些内容的函数必须与 libtorrent 主线程同步,并且如果它处于重负载下(尤其是在具有不变检查且没有优化的调试模式下构建时),这种同步可能会很明显,尤其是在制作许多它们时,并且经常。
有一些方法可以使用本质上更加异步的 libtorrent,并且正在努力最大限度地减少使用同步功能的需求。例如,可以订阅 torrent 状态更新,而不是单独查询所有 torrent 的状态。异步通知通过 pop_alerts() 返回。
是否会干扰twisted的epoll;我不能肯定地说,但似乎不太可能。
我认为不需要通过另一层线程与 libtorrent 进行交互,因为所有工作都已经在单独的线程中完成。