alpaca-trade-api-python
alpaca-trade-api-python copied to clipboard
adds self.run_forever_flag to streams
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