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

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

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

【问题讨论】:

    标签: python twisted bittorrent libtorrent


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多