我正在研究django app,我正在使用cherrypy作为服务器.Cherrypy为每个页面视图创建一个新线程.我希望能够从其中任何一个中访问所有这些线程(负责与django交谈的线程).更具体地说,我希望能够从其中任何一个中访问每个线程的thread_data.这可能吗?如果是这样,我该怎么办?
CherryPy的wsgiserver不会为每个请求创建一个新线程 - 它使用一个池.这些工作线程中的每一个都是threading.Thread的子类,因此所有这些线程都应该可以通过threading.enumerate()访问.
但是,如果你专门讨论cherrypy.thread_data,那就是其他东西:threading.local.如果您使用的是最新版本的Python,那么用C语言编写的所有内容(您可能都是正确的)都没有Python的跨线程访问权限.如果你真的需要它并且真正知道你正在做什么,那么最好的技术通常是在将它们插入到thread_data结构的同时在全局容器中附加对这些东西的附加引用.我推荐带有weakrefs的dicts作为那些全局容器的键 - 有足够的Python ORM将它们用于连接池(例如,参见我自己的Geniusql),你应该能够相当容易地学习如何实现它们.