Javascript RuntimeError:线程';中没有当前事件循环;螺纹-1';-请求\u html,html.render()
我正在尝试使用请求HTML模块在Python中每隔10秒呈现一个HTML页面。在第一次运行时,它工作得很好,但在崩溃后,出现以下错误消息。我的部分代码是:Javascript RuntimeError:线程';中没有当前事件循环;螺纹-1';-请求\u html,html.render(),javascript,python,Javascript,Python,我正在尝试使用请求HTML模块在Python中每隔10秒呈现一个HTML页面。在第一次运行时,它工作得很好,但在崩溃后,出现以下错误消息。我的部分代码是: def get_data_from_page(): session = HTMLSession() r = session.get('https://something.com/') threading.Timer(10.0, get_data_from_page).start()
def get_data_from_page():
session = HTMLSession()
r = session.get('https://something.com/')
threading.Timer(10.0, get_data_from_page).start()
r.html.render()
#code continues
def main():
get_data_from_page()
if __name__ == '__main__':
main()
错误消息是:
Exception in thread Thread-1:
File "/home/david/.local/lib/python3.6/site-packages/requests_html.py", line 572, in render
self.session.browser # Automatycally create a event loop and browser
File "/home/david/.local/lib/python3.6/site-packages/requests_html.py", line 679, in browser
self.loop = asyncio.get_event_loop()
File "/usr/lib/python3.6/asyncio/events.py", line 694, in get_event_loop
return get_event_loop_policy().get_event_loop()
File "/usr/lib/python3.6/asyncio/events.py", line 602, in get_event_loop
% threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Thread-1'.
与其每次都要启动一个计时器(从而启动一个新线程),不如每10秒启动一个执行请求的线程 例如:
class RequestThread(Thread):
def __init__(self):
super().__init__()
self.stop = Event()
def run(self):
while not self.stop.wait(10):
session = HTMLSession()
r = session.get('https://something.com/')
r.html.render()
def stop(self):
self.stop.set()
然而,看起来html对线程非常不友好(它使用信号等)。因此,您必须在主线程中运行它,并为您想要执行的任何其他操作创建一个线程。类似的方法似乎奏效了:
import requests_html
import time
def get_data_from_page():
print(time.time())
session = requests_html.HTMLSession()
r = session.get('https://google.com')
r.html.render()
while True:
next_time = time.time() + 10
get_data_from_page()
wait_for = next_time - time.time()
if wait_for > 0:
time.sleep(wait_for)