Hi all,

in my project, I'm traversing through a huge directory with millions of files, 
parse them and write the results into a Postgres database.
Unfortunately, I'm facing erros when I'm using multiprocessing.Pool with more 
than one processes.

This is how I'm inserting new values into the database:

obj, created = MyModel.objects.get_or_create(foo=foo, defaults={'foo': foo,}) # 
foo is unique


And this is the error message I'm getting: 


[ERROR] no results to fetch
Traceback (most recent call last):
  File "~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/utils.py", 
line 97, in inner
    return func(*args, **kwargs)
psycopg2.ProgrammingError: no results to fetch

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "~/develop/myApp/web/service/ais.py", line 94, in save
    db_foo = utils.create_foo(obj.get("foo"), obj.get("source"))
  File "~/develop/myApp/web/utils.py", line 85, in create_foo
    obj = MyModel.objects.get(foo=foo)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/manager.py", 
line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 411, in get
    num = len(clone)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 258, in __len__
    self._fetch_all()
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 1261, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 57, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, 
chunk_size=self.chunk_size)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
 line 1177, in execute_sql
    return list(result)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
 line 1576, in cursor_iter
    for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
 line 1576, in <lambda>
    for rows in iter((lambda: cursor.fetchmany(itersize)), sentinel):
  File "~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/utils.py", 
line 97, in inner
    return func(*args, **kwargs)
  File "~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/utils.py", 
line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/utils.py", 
line 97, in inner
    return func(*args, **kwargs)
django.db.utils.ProgrammingError: no results to fetch
[ERROR] error with status PGRES_TUPLES_OK and no message from the libpq
Traceback (most recent call last):
  File "~/develop/myApp/web/utils.py", line 85, in create_foo
    obj = MyModel.objects.get(foo=foo)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/manager.py", 
line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 415, in get
    raise self.model.DoesNotExist(
web.models.MyModel.DoesNotExist: MyModel matching query does not exist.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/backends/utils.py", 
line 86, in _execute
    return self.cursor.execute(sql, params)
psycopg2.DatabaseError: error with status PGRES_TUPLES_OK and no message from 
the libpq

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "~/develop/myApp/web/service/ais.py", line 94, in save
    db_foo = utils.create_foo(obj.get("foo"), obj.get("source"))
  File "~/develop/myApp/web/utils.py", line 89, in create_foo
    obj = MyModel.objects.create(foo=foo)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/manager.py", 
line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 433, in create
    obj.save(force_insert=True, using=self.db)
  File "~/develop/myApp/web/models.py", line 34, in save
    return super().save(*args, **kwargs)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/base.py", 
line 745, in save
    self.save_base(using=using, force_insert=force_insert,
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/base.py", 
line 782, in save_base
    updated = self._save_table(
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/base.py", 
line 887, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, 
returning_fields, raw)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/base.py", 
line 924, in _do_insert
    return manager._insert(
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/manager.py", 
line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/query.py", 
line 1204, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/models/sql/compiler.py",
 line 1384, in execute_sql
    cursor.execute(sql, params)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/backends/utils.py", 
line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, 
executor=self._execute)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/backends/utils.py", 
line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/backends/utils.py", 
line 86, in _execute
    return self.cursor.execute(sql, params)
  File "~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/utils.py", 
line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File 
"~/.virtualenvs/myApp/lib/python3.8/site-packages/django/db/backends/utils.py", 
line 86, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.DatabaseError: error with status PGRES_TUPLES_OK and no message 
from the libpq

---

Some additional info:


   - This does not happen with sqlite
   - I'm pretty sure it has something to do with multithreading, since I 
   don't get this error with Pool(processes=1) and the higher the 
processes-parameter 
   is, the more often does this error occur.
   - Versions:
      - Django==3.0.3
      - psycopg2-binary==2.8.4
   

Is there any chance I can get this working with ~8 threads? Is there 
something wrong with how I insert the data?
Unfortunately, I have several models that depend on each other (although I 
get this error with just inserting the first - didn't even get to the other 
models), so bulk-insert is not an option.

>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/d32a2dfd-4d27-43a0-9f2d-446e1d6302aa%40googlegroups.com.

Reply via email to