I probably learned that the error was due to the use of coroutine io in pyppeteer and requests_html, which conflicted with multithreading, but I can't find a way to fix this.I don't speak English very much, I use google translation.
import asyncio
from pyppeteer import launch
from requests_html import HTMLSession
# Simulation using requests_html
def test1():
session = HTMLSession()
_r = session.get('http://bbs.tianya.cn/post-free-6085404-1.shtml' )
_r.html.render()
html = _r.html.html
print(html)
# main
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('http://example.com')
await page.screenshot({'path': 'example.png'})
await browser.close()
##The pyppeteer method is called at work
def aJob(arg):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main())
## Multi-threaded task generation
def multiThread():
from multiprocessing.dummy import Pool as ThreadPool
cpus = 1 # 线程池大小
pool = ThreadPool(cpus)
_lstParam = range(0, 3)
pool.map(aJob, _lstParam)
pool.close()
pool.join()
if __name__ == "__main__":
loop = asyncio.new_event_loop()
multiThread()
I want to call pyppeteer or requests_html to simulate browsing the webpage in multithreading, but I always get the error "ValueError: signal only works in main thread" or "RuntimeError: There is no current event loop in thread 'Thread-1'." I have tried many methods, but I have been unable to run successfully.Please give me help, thank you!