Hi Jean-Paul, I found the error after working on a short, self contained, correcte example. It is not about twisted and normal thread in general, but something else.
After more tests, I come to realise that whenever I instantiate this class PolicyClient from this library https://github.com/ray-project/ray/blob/master/rllib/env/policy_client.py in my protocol or just anywhere, twisted app either freezes or terminates, and this *only* happens when the app runs as a daemon, created using a service (.tac file). I hope you can take a look at the class PolicyClient, why it causes problem to reactor main loop. Please point me to where the idea might come from. I can give you the example but not sure if it is enough, as the client needs to connect to a server. Thank you, TS On Thu, May 21, 2020 at 5:23 PM Jean-Paul Calderone < exar...@twistedmatrix.com> wrote: > On Thu, May 21, 2020 at 10:58 AM Sereysethy TOUCH < > touch.sereyse...@gmail.com> wrote: > >> Hello, >> >> I am developing a twisted app, and it runs as a service using twistd -y >> to start the app. >> I am having a problem of running a thread. I know it is not recommended >> to use thread, but the library that I use, the object created is running in >> a thread. >> >> Here is the problem: >> >> 1) if I start reactor by running reactor.run() directly, thread is >> running fine >> 2) if I run it as a service using twisted, the thread is not running, it >> runs but it seems to be blocked, because I tried to write something to file >> using time.sleep(), but file is empty. >> >> Is there something that I miss? How can I debug this? >> > > A good next step would be to create at Short, Self Contained, Correct > (Compilable), Example <http://sscce.org/> and share it. > > Jean-Paul > > >> >> Thank you, >> >> TS >> _______________________________________________ >> Twisted-Python mailing list >> Twisted-Python@twistedmatrix.com >> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python >> > _______________________________________________ > Twisted-Python mailing list > Twisted-Python@twistedmatrix.com > https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python >
import time import threading from twisted.internet import reactor from twisted.application import service from twisted.python import failure, log from twisted.internet.protocol import Factory, Protocol from twisted.internet.endpoints import TCP4ServerEndpoint import logging # from ray.rllib.env.policy_client import PolicyClient logging.basicConfig(filename='rllib.log') logger = logging.getLogger(__name__) logger.setLevel("INFO") class MyThread(threading.Thread): def __init__(self,stop=False): threading.Thread.__init__(self) self.stop = stop def run(self): while not self.stop: time.sleep(2) logger.info('thread is alive') class Echo(Protocol): def __init__(self): self.t = MyThread() self.t.daemon = True self.t.start() # this will freeze everything # self.policyClient = PolicyClient("http://localhost:9900") # def connectionMade(self): # self.policyClient = PolicyClient("http://localhost:9900") def dataReceived(self, data): self.transport.write(data) def connectionLost(self, reason): self.t.stop = True class EchoFactory(Factory): def buildProtocol(self, addr): return Echo() class EchoService(service.Service): def startService(self): self._port = reactor.listenTCP(8080, EchoFactory()) def stopService(self): return self._port.stopListening() if __name__ == "__main__": endpoint = TCP4ServerEndpoint(reactor, 8080) endpoint.listen(EchoFactory()) reactor.run()
service.tac
Description: Binary data
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python