类的__init__方法中线程无法启动的问题求助
问题分析与解决
核心问题1:线程创建方式错误
你创建线程时直接调用了populate_orderbook(self, 10),这会导致主线程先执行完这个函数,再创建线程,而target实际接收的是函数执行后的返回值(这里是None),所以线程根本没触发目标函数。
正确的写法是把函数对象传给target,参数通过args元组传递:
threading.Thread(target=populate_orderbook, args=(self, 10)).start()
核心问题2:循环无限执行
populate_orderbook里的while i < n循环没有递增i,会导致无限循环,永远不会执行到最后的打印语句,看起来像是线程没工作。需要在循环内添加i += 1:
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) i += 1 # 必须添加这行,否则循环永不结束 print(f'Orderbook prepopulated..')
修正后的完整__init__方法
class OrderBook: 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) # 修正线程创建方式 threading.Thread(target=populate_orderbook, args=(self, 10)).start() print(f'Orderbook initialized..')
额外注意事项
- 如果
Order类或add方法有问题,也可能导致线程无输出,需要确保这两部分逻辑正常。 - 线程启动后是后台执行的,主线程如果退出会直接终止所有后台线程,所以如果你的程序初始化后立刻结束,需要让主线程等待线程完成(比如用
join()),或者保持程序运行。
内容的提问来源于stack exchange,提问作者JSRB
相关产品推荐
相关产品推荐

