Sudip Bhandari
Sudip Bhandari

Reputation: 1

How do I generate a PDF using pyppeteer in Django? Got error signal only works in main thread of the main interpreter

#urls.py

path('pdf/',
         views.generate_pdf),

#views.py

from pyppeteer import launch
import os
import asyncio

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto("https://python.org")
    await page.waitFor(1000)
    await page.pdf({"path": "python.pdf"})
    await browser.close()


async def generate_pdf(request):
    print("Starting...")
    await main()
    print("PDF has been taken")
    return HttpResponse("PDF has been generated")

I got an error: signal only works in main thread of the main interpreter.

It works nicely while running in a standalone Python file but not inside Django.

I got a runtime error This event loop is already running.

while using

async def generate_training_pdf(request):
    asyncio.get_event_loop().run_until_complete(main())

Upvotes: 0

Views: 86

Answers (1)

Serhii Kisil
Serhii Kisil

Reputation: 11

In my case I added some adjusments to avoid "signal" errors. Here is an example what I used to handle that.

async def lunch_browser(self):
    return await launch(
        # to avoid signal error
        
        handleSIGINT=False,
        handleSIGTERM=False,
        handleSIGHUP=False,
        ignoreHTTPSErrors=True,
        
    )

Upvotes: 1

Related Questions