Thread wont start within __init__ method of my class

Question:

Within the __init__ of my class I want to trigger a thread that handles a function.
For some reason the thread isnt triggered though, nothing just happens:

class OrderBook:

    # Create two sorted lists for bids and asks
    def __init__(self, bids=None, asks=None):
        if asks is None:
            asks = []
        if bids is None:
            bids = []
        self.bids = sortedcontainers.SortedList(bids, key=lambda order: -order.price)
        self.asks = sortedcontainers.SortedList(asks, key=lambda order: order.price)

        # Populate Orderbook with 50 orders
        threading.Thread(target=populate_orderbook(self, 10)).start()
        print(f'Orderbook initialized..')

    ...

And the function to be triggered which isnt though

def populate_orderbook(orderbook_instance, n):
    order_type = ['Limit']
    side = ['Buy', 'Sell']

    i = 1
    while i < n:
        # Create random order
        order_obj = Order(
            order_type=order_type[0],
            side=random.choice(side),
            price=random.randint(1, 1000),
            power=random.randint(1, 1000),
        )
        orderbook_instance.add(order_obj)
    print(f'Orderbook prepopulated..')
Asked By: JSRB

||

Answers:

You are calling the target function eagerly, on the main thread.

You have to pass the function as an argument to the Thread constructor, and the arguments in separate, so that the function will be called inside the running thread:

        threading.Thread(target=populate_orderbook, args=(self, 10)).start()
Answered By: jsbueno
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.