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 < [email protected]> wrote: > On Thu, May 21, 2020 at 10:58 AM Sereysethy TOUCH < > [email protected]> 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 >> [email protected] >> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python >> > _______________________________________________ > Twisted-Python mailing list > [email protected] > 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 [email protected] https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
