mick76
August 23, 2021, 5:45pm
1
Hi,
i´m creating a streamlit app for stock trading.
I tried to import ib_insync, but it doesn`t work.
from ib_insync import *
RuntimeError: There is no current event loop in thread 'ScriptRunner.scriptThread'.
Traceback:
File "/home/xxx/.local/lib/python3.9/site-packages/streamlit/script_runner.py", line 350, in _run_script
exec(code, module.__dict__)
File "/home/xxx/stocks/streamlit/streamlit.py", line 1, in <module>
from ib_insync import *
File "/home/xxx/.local/lib/python3.9/site-packages/ib_insync/__init__.py", line 7, in <module>
from eventkit import Event
File "/home/xxx/.local/lib/python3.9/site-packages/eventkit/__init__.py", line 4, in <module>
from .event import Event
File "/home/xxx/.local/lib/python3.9/site-packages/eventkit/event.py", line 7, in <module>
from .util import NO_VALUE, main_event_loop
File "/home/xxx/.local/lib/python3.9/site-packages/eventkit/util.py", line 18, in <module>
main_event_loop = asyncio.get_event_loop()
File "/usr/lib/python3.9/asyncio/events.py", line 642, in get_event_loop
raise RuntimeError('There is no current event loop in thread %r.'
Is it possible to get it work?
Thank you
1 Like
Hi @mick76
Is this similar to the issue you’re facing?
opened 06:28PM - 25 Nov 19 UTC
bug
confirmed 🤝
P3 🌩
# Summary
I am running pyppeteer, which depends on asyncio, to load data which … is only available in a rendered web page. I experienced an error earlier with Jupyter, which depends on tornado, and where I received an error that `RuntimeError: This event loop is already running`. The reason is that tornado was reworked with asyncio and there didn't seem to be a realistic workaround by the Jupyter developers. The issue was solved with this library [nest_asyncio](https://github.com/erdewit/nest_asyncio). Whether I include nest_asyncio or not, I receive the error `RuntimeError: There is no current event loop in thread 'ScriptRunner.scriptThread'`.
# Steps to reproduce
What are the steps we should take to reproduce the bug:
1. Initializing the RenderHTML class in the following imported file, will cause the error to be outputted as an error to the Streamlit UI.
```
import asyncio
import nest_asyncio
#nest_asyncio.apply()
from pyppeteer import launch
class HTMLMissing(Exception):
'''An exception for a missing or invalid HTML.'''
pass
class RenderHTML():
def __init__(self, html=None):
self.html = ""
self.set_html(html)
asyncio.get_event_loop().run_until_complete(self.build_page())
async def build_page(self):
browser = await launch()
context = await browser.createIncognitoBrowserContext()
self.page = await browser.newPage()
...other functions...
```
## Expected behavior:
Load RenderHTML class, launch chrome, and build a new browser page.
## Actual behavior:
### With: nest_asyncio.apply()
```
RuntimeError: There is no current event loop in thread 'ScriptRunner.scriptThread'.
Traceback:
File "c:\users\jroak\anaconda3\envs\project\lib\site-packages\streamlit\ScriptRunner.py", line 311, in _run_script
exec(code, module.__dict__)
File "D:\AnacondaProjects\DataProject\main.py", line 25, in <module>
from engine import *
File "D:\AnacondaProjects\DataProject\engine.py", line 25, in <module>
from lib import *
File "D:\AnacondaProjects\DataProject\lib\__init__.py", line 34, in <module>
from .renderer import RenderHTML
File "D:\AnacondaProjects\DataProject\lib\renderer.py", line 55, in <module>
nest_asyncio.apply()
File "c:\users\jroak\anaconda3\envs\project\lib\site-packages\nest_asyncio.py", line 11, in apply
loop = loop or asyncio.get_event_loop()
File "c:\users\jroak\anaconda3\envs\project\lib\asyncio\events.py", line 644, in get_event_loop
% threading.current_thread().name)
```
### Without: nest_asyncio.apply()
```
RuntimeError: There is no current event loop in thread 'ScriptRunner.scriptThread'.
Traceback:
File "c:\users\jroak\anaconda3\envs\project\lib\site-packages\streamlit\ScriptRunner.py", line 311, in _run_script
exec(code, module.__dict__)
File "D:\AnacondaProjects\DataProject\main.py", line 94, in <module>
main()
File "D:\AnacondaProjects\DataProject\main.py", line 71, in main
crawler = render_data(crawler)
File "c:\users\jroak\anaconda3\envs\project\lib\site-packages\streamlit\caching.py", line 560, in wrapped_func
return get_or_set_cache()
File "c:\users\jroak\anaconda3\envs\project\lib\site-packages\streamlit\caching.py", line 540, in get_or_set_cache
return_value = func(*args, **kwargs)
File "D:\AnacondaProjects\DataProject\main.py", line 39, in render_data
crawler.render()
File "D:\AnacondaProjects\DataProject\engine.py", line 126, in render
renderer = RenderHTML()
File "D:\AnacondaProjects\DataProject\lib\renderer.py", line 72, in __init__
asyncio.get_event_loop().run_until_complete(self.build_page())
File "c:\users\jroak\anaconda3\envs\project\lib\asyncio\events.py", line 644, in get_event_loop
% threading.current_thread().name)
```
## Is this a regression?
That is, did this use to work the way you expected in the past? IDK
yes / no
# Debug info
- Streamlit version: 0.50.2
- Python version: 3.7.5
- Using Conda? PipEnv? PyEnv? Pex? Conda
- OS version: Windows 10
- Browser version: 70.0.1 (64-bit)
# Additional information
If needed, add any other context about the problem here. For exmaple, did this bug come from https://discuss.streamlit.io or another site? Link the original source here!
Charly
mick76
August 24, 2021, 8:23am
3
Yes, it seems the same problem.
1 Like
mick76
August 30, 2021, 8:32pm
4
Any idea or is it impossible?
mick76
September 29, 2021, 10:53am
5
Ok, it seems impossible.
Does anybody use the API from Interactive Brokers with streamlit?