将 Twisted 中的代码延迟到特定线程



我正在用Twisted和pyCUDA编写一个服务器。 CUDA 工作方式的一个限制是,我必须在初始化它的同一线程中访问 CUDA 上下文。 但是,Twisted 的线程池实现不允许我请求特定线程。

例如,如果我有多个客户端连接到服务器,它们将请求使用 CUDA 完成一些计算。 将使用同一个 CUDA 对象请求多个操作(初始化成本很高)。 我想使用 deferToThread 函数,但这不允许我推迟到特定的线程,只是"一些"线程。 理想情况下,我想做的是使用像 deferToThread 这样的机制,但指定运行代码的线程。 任何建议将不胜感激,也许 Twisted 是这个项目的错误方式。

CUDA Driver API 支持通过使用函数 cuCtxPushCurrent() 和 cuCtxPopCurrent() 从多个线程提交到 CUcontext (Driver API) 的工作。许多版本的当前版本。在 CUDA 4.0 及更高版本中,CUDA 运行时支持从多个操作系统线程向设备 (CUcontext) 提交工作,或使用函数 cudaSetDevice() 从单个操作系统线程向多个设备提交工作。

我不确定这是否通过pyCUDA暴露。

对于您使用 CUDA 的特定用例,Greg Smith 的答案可能是最好的。

但是,对于遇到这个问题的其他人来说,他们正在寻找一种在Twisted中的一个特定线程中做事的方法,日历和联系人服务器已经实现了该功能,正如你所看到的,它并不太复杂。

最新更新