python - 无法在类中腌制 sqlAlchemy 引擎
问题描述
我想在我的自定义类中使用多处理模块和 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 = 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
我知道多处理有时会因为pickle而很麻烦,而且我知道这个问题是由于self.engine,因为它不能被pickle。但我必须engine
在课堂上使用这个变量。
那么,在我的示例中,如何使引擎可供选择?
提前致谢。
解决方案
推荐阅读
- c - 调用返回 char* 的 C 函数时在 python3 中获取负值
- regex - 删除字符串包含使用正则表达式的单词
- java - 如何以 xamarin 形式自定义滑块?
- javascript - 如何在反应中显示两个节点之间的标签?
- python - python matploblib 如何在我的条形图顶部添加数字
- python - 为什么 skimage 中的“imshow”不能与位移一起正常工作
- python - Pip3 install pygame not working (MacOs) 导致错误:错误:命令错误退出状态为 1
- vue.js - 在 vue.js 中安装 vuetify 后,新项目无法编译
- python - PYQT5 MDI子窗口的控件比设计窗口的控件上移为什么?任何解决方案?
- java - 如何在循环链表中插入字符串(我想检查循环链表中的重复单词)?