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

时间:2012-05-23 23:42:27

标签: python twisted python-multithreading pycuda

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

例如,如果我有多个客户端连接到服务器,他们将请求使用CUDA完成一些计算。将使用相同的CUDA对象请求多个操作(初始化很昂贵)。我想使用deferToThread函数,但这不允许我遵循特定的线程,只是'某些'线程。理想情况下,我想要使用像deferToThread这样的机制,但是要指定代码运行的线程。任何建议都会受到赞赏,也许Twisted是错误的方式来进行这个项目。

2 个答案:

答案 0 :(得分:3)

CUDA驱动程序API支持通过使用函数cuCtxPushCurrent()cuCtxPopCurrent()从多个线程提交工作到CUcontext(驱动程序API)。许多版本的当前。在CUDA 4.0及更高版本中,CUDA Runtime支持从多个OS线程向设备提交工作(CUcontext),或使用函数cudaSetDevice()从单个OS线程向多个设备提交工作。

我不确定这是否通过pyCUDA公开。

答案 1 :(得分:1)

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

但是,对于其他发生在这个问题上的人来说,寻找在Twisted中的一个特定线程中做事的方法Calendar and Contacts Server has an implementation of that functionality,正如你所看到的,它并不太复杂。