我正在使用django應用程序,並且使用cherrypy作爲服務器。 Cherrypy爲每個頁面視圖創建一個新線程。我希望能夠從任何這些線程中訪問所有這些線程(負責與django交談的線程)。更具體地說,我希望能夠從任何這些線程中訪問每個線程的thread_data。這可能嗎?如果是這樣,我該怎麼做?cherrypy如何處理用戶線程?
4
A
回答
6
CherryPy的wsgiserver不爲每個請求創建一個新的話題 - 它使用一個游泳池。這些工作線程中的每一個都是threading.Thread的子類,所以它們都應該可以通過threading.enumerate()來訪問。
不過,如果你對cherrypy.thread_data具體講,這是別的東西:一個threading.local。如果你使用的是Python的最新版本,那麼所有這些都是用C語言編寫的,你(可能是正確的)不能從Python跨線程訪問它。如果你真的需要它和真的知道你在做什麼,最好的技術,通常是在它們插入thread_data結構,同時在全球集裝箱堅持一個額外的參考這樣的事情。我推薦使用weakrefs作爲這些全局容器的關鍵字 - 有足夠的Python ORM將它們用於連接池(例如,參見我自己的Geniusql),您應該能夠學會如何相當容易地實現它們。
4
我對這樣的問題,第一反應就是不告訴你如何把它做,但強調一點,你真的應該與此前進之前重新考慮。我通常回避線程化Web服務器,轉而採用多進程或異步解決方案。向混音添加顯式的線程間通信只會增加這些恐懼。
當問到這樣的問題時,有一個更深的目標。我懷疑你認爲線程間通信能夠解決的問題實際上可以通過其他更安全的方式解決。
相關問題
- 1. 如何在CherryPy中處理Web請求?
- 2. CherryPy中的用戶管理
- 3. 如何在線程中處理線程?
- 4. 如何處理線程
- 5. 如何處理線程?
- 6. 如何處理線程C#
- 7. 如何處理java線程
- 8. Java:ThreadFactory如何處理線程?
- 9. 線程如何處理?
- 10. uWSGI,cherrypy和線程
- 11. 如何處理OpenMP線程池爭用
- 12. 如何在CherryPy中動態創建請求處理程序?
- 13. 線程處理
- 14. 處理線程
- 15. CherryPy的多線程例子
- 16. WinForms線程調用處理
- 17. POST如何處理用戶?
- 18. 如何處理掛起的子線程?
- 19. 如何處理線程即將終止?
- 20. 如何爲WebBrowser控件處理線程
- 21. 如何多線程隊列處理
- 22. 的Java如何處理一個線程
- 23. 如何處理線程和領域? (iOS)
- 24. 如何多線程處理方法
- 25. Java如何處理多線程?
- 26. .NET如何處理IOCP線程安全?
- 27. 線程和fork()。我該如何處理?
- 28. 如何處理與線程退出
- 29. android如何處理動畫線程
- 30. java如何處理多線程?比進程更多的線程
你能更具體嗎? – willurd 2008-10-04 20:55:41