Python Can';不要在类中pickle sqlAlchemy引擎
我想在我的自定义类中使用带有sqlAlchemy的多处理模块。 代码如下:Python Can';不要在类中pickle sqlAlchemy引擎,python,sqlalchemy,multiprocessing,pickle,Python,Sqlalchemy,Multiprocessing,Pickle,我想在我的自定义类中使用带有sqlAlchemy的多处理模块。 代码如下: from sqlalchemy import create_engine engine = create_engine(f'mysql+pymysql://a:b@localhost:3306/', server_side_cursors=True, pool_size=20) class Client(object): def __init__(self): self.engine = cr
from sqlalchemy import create_engine
engine = create_engine(f'mysql+pymysql://a:b@localhost:3306/', server_side_cursors=True, pool_size=20)
class Client(object):
def __init__(self):
self.engine = create_engine(f'mysql+pymysql://a:b@localhost:3306/', server_side_cursors=True, pool_size=20)
self.pool = Pool(6)
def run_in_process(self, x):
conn = self.engine.connect()
print(conn)
def run(self):
x = 'x'
res = self.pool.apply_async(self.run_in_process, (x,))
res.get()
def __getstate__(self):
self_dict = self.__dict__.copy()
del self_dict['pool']
return self_dict
def __setstate__(self, state):
self.__dict__.update(state)
pool = Pool(6)
client = Client()
client.run()
它显示了错误:
File "test_pickle.py", line 32, in <module>
client.run()
File "test_pickle.py", line 19, in run
res.get()
File "/home/airflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/pool.py", line 657, in get
raise self._value
File "/home/airflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/pool.py", line 431, in _handle_tasks
put(task)
File "/home/airflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/connection.py", line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File "/home/airflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/reduction.py", line 51, in dumps
cls(buf, protocol).dump(obj)
TypeError: can't pickle _thread._local objects
文件“test_pickle.py”,第32行,在
client.run()
文件“test_pickle.py”,第19行,正在运行
res.get()
get中的文件“/home/afflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/pool.py”,第657行
提升自我价值
文件“/home/afflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/pool.py”,第431行,在处理任务中
放置(任务)
文件“/home/afflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/connection.py”,第206行,在send中
self.\u发送\u字节(\u ForkingPickler.dumps(obj))
文件“/home/afflow/.pyenv/versions/3.7.3/lib/python3.7/multiprocessing/reduce.py”,第51行,转储中
cls(buf,协议).dump(obj)
TypeError:无法pickle\u线程。\u本地对象
我知道由于pickle,多处理有时会很麻烦,我知道这个问题是由于self.engine造成的,因为它不能被pickle。但是我必须在类中使用engine
这个变量
那么,在我的示例中,如何使引擎可拾取
提前谢谢