psycopg2 copy_from 在芹菜任务中通过同步连接引发异步编程错误

Phi*_*ash 2 python asynchronous psycopg2 sqlbulkcopy celery

我的问题是我面临

ProgrammingError: copy_from 不能与异步回调一起使用。

在尝试copy_from没有异步连接时。必须说明的是,我正在从芹菜任务创建连接。有人可以告诉我 sqlalchemy 或 celery 或任何强制我的 psycopg2 连接表现得像异步的线索吗?

conn = psycopg2.connect(con_string)
conn.async
>>0
cur = conn.cursor()    
data = BytesIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)
curs.copy_from(data, 'test_copy')
Run Code Online (Sandbox Code Playgroud)

Cat*_*lin 5

我们在 pgcli 中遇到了这个错误;在这种情况下,结果是 wait_callback 使连接表现得好像从 psycopg2 的角度来看是异步的。这有助于:

from contextlib import contextmanager

@contextmanager
def _paused_thread():
    try:
        thread = psycopg2.extensions.get_wait_callback()
        psycopg2.extensions.set_wait_callback(None)
        yield
    finally:
        psycopg2.extensions.set_wait_callback(thread)

with _paused_thread():
    cursor.copy_expert('copy mytable to STDOUT', file)
Run Code Online (Sandbox Code Playgroud)