如何解决是否可以在MS SQL Server中使用python多处理功能
我们每天早上都在使用MS sql Server和外部python脚本来查询统计数据库,该数据库返回JSON-Stat。然后,我们通过Pyjstat库函数from_json_stat()运行该JSON-Stat,将其从JSON-Stat转换为MS sql Server可以读取的pandas DataFrame。
在这个国家统计数据库中最大的表格上,这可能需要7到10分钟的时间,我们想到了使用python的多处理程序来至少加快from_json_stat的速度。在python中运行代码可以完美地工作,但是,当我们随后通过Microsoft的sql Management Studio运行代码时,在我们试图加快速度的那个函数上遇到了一个pickle错误。
这是相关的代码,它在python中有效,我们可以最大程度地加快最大查询的速度,但不能通过SSMS的python外部脚本进行。
def run_pyjstat(result_list):
return pyjstat.from_json_stat(result_list.json(object_pairs_hook=OrderedDict),naming="id")[0]
def post_query():
Meta_data = Meta_filter()
result_list = []
for variables in Meta_data:
query = build_query(variables)
data = requests.post(ssb_table.Metadata_url,json=query)
result_list.append(data)
time.sleep(5.0)
return result_list
def master():
dataframes = []
x = post_query()
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
dataframes = pool.map(run_pyjstat,x)
pool.close()
pool.join()
big_df = pd.concat(dataframes,ignore_index=True)
return big_df
if __name__ == "__main__":
ssb_table = SSBTable(TableNumber)
klass = RegionKLASS(["131","104","214","231"])
r = master()
Error in execution. Check the output for more information.
Traceback (most recent call last):
File "<string>",line 5,in <module>
File "D:\sql-MSsqlSERVER-ExtensibilityData-PY\MSsqlSERVER01\0ECB2A7F-0698-4FA7-86E6-76EF41292E20\sqlindb.py",line 691,in transform
r = master()
File "D:\sql-MSsqlSERVER-ExtensibilityData-PY\MSsqlSERVER01\0ECB2A7F-0698-4FA7-86E6-76EF41292E20\sqlindb.py",line 667,in master
dataframes = pool.map(run_pyjstat,x)
File "C:\Program Files\Microsoft sql Server\MSsql14.MSsqlSERVER\PYTHON_SERVICES\lib\multiprocessing\pool.py",line 260,in map
return self._map_async(func,iterable,mapstar,chunksize).get()
File "C:\Program Files\Microsoft sql Server\MSsql14.MSsqlSERVER\PYTHON_SERVICES\lib\multiprocessing\pool.py",line 608,in get
raise self._value
File "C:\Program Files\Microsoft sql Server\MSsql14.MSsqlSERVER\PYTHON_SERVICES\lib\multiprocessing\pool.py",line 385,in _handle_tasks
Msg 39019,Level 16,State 2,Line 2
An external script error occurred:
put(task)
File "C:\Program Files\Microsoft sql Server\MSsql14.MSsqlSERVER\PYTHON_SERVICES\lib\multiprocessing\connection.py",line 206,in send
self._send_bytes(ForkingPickler.dumps(obj))
File "C:\Program Files\Microsoft sql Server\MSsql14.MSsqlSERVER\PYTHON_SERVICES\lib\multiprocessing\reduction.py",line 50,in dumps
cls(buf,protocol).dump(obj)
AttributeError: Can't pickle local object 'transform.<locals>.run_pyjstat'
sqlSatelliteCall error: Error in execution. Check the output for more information.
我们俩都是这个项目的大三学生,主要在学校中使用Java。我们没有其他开发人员可以在此前提下询问,而在google上进行搜索并不会在此特定问题上产生很多结果。也许我的Google搜索技能不好。
我们已经考虑脱离MS sql Server external_script并使用Java,但是目前它无需多处理即可运行,尽管比我们想要的要慢。
有什么办法可以使它与python外部脚本一起使用?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。