Daemon Thread vs Infinite Running Normal Thread that calls join

General Tech Bugs & Fixes 2 years ago

0 1 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (1)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

I am sorry if this is a stupid question but this has been bugging me for the last 2 weeks and I had to finally ask. I am trying to listen to redis publish s://forum.tuteehub.com/tag/messages">messages that I send from Node JS express in Python. I see that 2 things are possible

  1. I can either have a simple thread run infinitely and call join inside the main thread which means that the main thread will end only when the thread ends. But I have an infinite thread so seems like a cheat code
  2. I can set the Thread as Daemon and run infinitely but main thread also needs to run infinitely in order to receive events such as KeyboardInterrupt
  3. Can someone kindly explain WHICH approach is better? and WHATS the DIFFERENCE
  4. I am looking to run this Python process infinitely along with my node express from where I publish s://forum.tuteehub.com/tag/messages">messages with redis and Python receives them in order to do some numpy computations

Common parts

import redis
import threading
import time

client = redis.Redis()
subscriber = client.pubsub()
subscriber.subscribe("klines")

Method 1

class ThreadedSubscriber1(threading.Thread):
"""
This class handles subscription s://forum.tuteehub.com/tag/messages">messages from redis inside a separate thread in its run() s://forum.tuteehub.com/tag/method">method
"""
def __init__(self):
super().__init__()

def run(self):
for message in subscriber.listen():
print(message)

def main1():
try:
s = ThreadedSubscriber1()
s.start()
s.join()
except KeyboardInterrupt:
pass

main1()

Method 2

class ThreadedSubscriber2(threading.Thread):
"""
This class handles subscription s://forum.tuteehub.com/tag/messages">messages from redis inside a separate thread in its run() s://forum.tuteehub.com/tag/method">method
"""

def __init__(self):
super().__init__()

def run(self):
for message in subscriber.listen():
print(message)

def main2():
try:
s = ThreadedSubscriber2()
s.setDaemon(True)
s.start()

while True:
time.sleep(1)
except KeyboardInterrupt:
pass

main2()

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.