tutorcruncher / pydf

PDF generation in python using wkhtmltopdf for heroku and docker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Exception while generating pdf

Spawn opened this issue · comments

commented
Traceback (most recent call last):
  File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/home/bogdan/Projects/inkit_microservices/services/pdf-renderer/service/consumer.py", line 19, in run
    PDFRenderer(self.campaign_id)
  File "/home/bogdan/Projects/inkit_microservices/services/pdf-renderer/service/renderer.py", line 58, in __init__
    self.ioloop.run_until_complete(self.process_contacts())
  File "/usr/lib/python3.6/asyncio/base_events.py", line 468, in run_until_complete
    return future.result()
  File "/home/bogdan/Projects/inkit_microservices/services/pdf-renderer/service/renderer.py", line 67, in process_contacts
    await asyncio.gather(*tasks)
  File "/home/bogdan/Projects/inkit_microservices/services/pdf-renderer/service/renderer.py", line 100, in render_pdf
    front_pdf = await self.apydf.generate_pdf(front_html)
  File "/home/bogdan/Projects/inkit_microservices/services/pdf-renderer/.env/lib/python3.6/site-packages/pydf/wkhtmltopdf.py", line 65, in generate_pdf
    loop=self.loop
  File "/usr/lib/python3.6/asyncio/subprocess.py", line 225, in create_subprocess_exec
    stderr=stderr, **kwds)
  File "/usr/lib/python3.6/asyncio/base_events.py", line 1194, in subprocess_exec
    bufsize, **kwargs)
  File "/usr/lib/python3.6/asyncio/unix_events.py", line 203, in _make_subprocess_transport
    self._child_watcher_callback, transp)
  File "/usr/lib/python3.6/asyncio/unix_events.py", line 867, in add_child_handler
    "Cannot add child handler, "
RuntimeError: Cannot add child handler, the child watcher does not have a loop attached
commented

Python3.6
code:

apydf = AsyncPydf()
pdf = await apydf.generate_pdf(html)
commented

I'm running each pdf processing in separate thread. Each thread has personal ioloop. So maybe problem in this.

You shouldn't run it in separate threads, the generate_pdf coroutine takes care of running each pdf generation in a separate process.

Better to use asyncio.gather or similar.

This looks to me like a limitation (or misuse) of asyncio, not pydf.