alpaca-trade-api-python icon indicating copy to clipboard operation
alpaca-trade-api-python copied to clipboard

adds self.run_forever_flag to streams

Open 0xfMissingNo opened this issue 4 years ago • 0 comments

wanted to handle async loops from a separate thread if need be; pushing my patch upstream:

In [1]: import os

In [2]: import time

In [3]: import threading

In [4]: import asyncio

In [5]: from alpaca_trade_api.stream import Stream

In [6]: asyncio.set_event_loop(asyncio.new_event_loop())

In [7]: loop = asyncio.get_event_loop()

In [8]: async def print_quote(*args):
   ...:     print(*args)
   ...: 

In [9]: stream = Stream(os.getenv('PAPER_ALPACA_API_KEY_ID'), os.getenv('PAPER_ALPACA_API_SECRET_KEY'), 'https://paper-api.alpaca.markets')

In [10]: stream.subscribe_quotes(print_quote, 'AAPL')

In [11]: def run():
    ...:     loop.run_until_complete(stream._run_forever())
    ...: 

In [12]: thread = threading.Thread(target=run, args=(), daemon=True)

In [13]: thread.start()

In [14]: thread.is_alive()
Out[14]: True

In [15]: stream._data_ws._run_forever_flag
Out[15]: True

In [16]: asyncio.run_coroutine_threadsafe(stream.stop_ws(), loop)
Out[16]: <Future at 0x7f9fab23ff40 state=pending>

In [17]: stream._data_ws._run_forever_flag
Out[17]: True

In [18]: thread.is_alive()
Out[18]: True

In [19]: asyncio.run_coroutine_threadsafe(stream._close(), loop)
Out[19]: <Future at 0x7f9fa8757670 state=pending>

data websocket error, restarting connection: code = 1000 (OK), no reason
In [20]: thread.is_alive()
Out[20]: False

In [21]: stream._data_ws._run_forever_flag
Out[21]: False

In [22]: exit

0xfMissingNo avatar Sep 29 '21 21:09 0xfMissingNo