Como é que cherrypy lidar com threads do usuário?

votos
4

Eu estou trabalhando em um direito django app e eu estou usando cherrypy que o servidor. Cherrypy cria uma nova thread para cada exibição de página. Eu gostaria de ser capaz de acessar todos esses tópicos (tópicos responsável por falar com django) a partir de qualquer um deles. Mais especificamente eu gostaria de ser capaz de acessar o thread_data para cada um desses tópicos a partir de qualquer um deles. Isso é possível? Se sim, como eu faço isso?

Publicado 26/09/2008 em 06:47
fonte usuário
Em outras línguas...                            


2 respostas

votos
6

wsgiserver do CherryPy não cria um novo segmento para cada pedido - ele usa uma piscina. Cada um desses segmentos de trabalho é uma subclasse de threading.Thread, então todos eles devem ser acessíveis via threading.enumerate ().

No entanto, se você está falando especificamente sobre cherrypy.thread_data, isso é outra coisa: a threading.local. Se você estiver usando uma versão recente do Python, então tudo o que é codificado em C e você (provavelmente com razão) não têm acesso cross-thread-lo de Python. Se você realmente precisa dele e realmente sabe o que está fazendo, a melhor técnica é geralmente furar uma referência adicional a essas coisas em um recipiente global, ao mesmo tempo em que eles estão inseridos na estrutura thread_data. Eu recomendo dicts com weakrefs como chaves para aqueles recipientes globais - não são suficientes Python ORM do que os usam para piscinas de ligação (ver meu próprio Geniusql, por exemplo) que você deve ser capaz de aprender como implementá-los com bastante facilidade.

Respondeu 30/09/2008 em 07:52
fonte usuário

votos
4

Minha primeira resposta a uma pergunta como esta não é dizer-lhe como fazê-lo, mas para enfatizar que você realmente deveria reconsiderar antes de avançar com isto. I normalmente coíbe de web-servidores encadeados, em favor de multi-processo ou soluções assíncronas. Adicionando a comunicação inter-thread explícita à mistura só aumenta esses medos.

Quando uma questão como esta é feita, há um objetivo mais profundo. Eu suspeito que o que você pensa a comunicação inter-thread resolveria pode realmente ser resolvido de alguma outra maneira, mais seguro.

Respondeu 30/09/2008 em 03:52
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more