首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >monetdbe:多个连接--读和写

问monetdbe:多个连接--读和写
EN

Stack Overflow用户
提问于 2021-02-09 19:49:54
回答 1查看 95关注 0票数 0

我发现,使用monetdbe (embedded,Python),我可以从两个进程同时将数据导入两个表,但我不能执行两个SELECT查询。

例如,如果我在Bash中运行它:

代码语言:javascript
复制
(python stdinquery.py < sql_examples/wind.sql &); (python stdinquery.py < sql_examples/first_event_by_day.sql &)

然后,我从一个进程中得到这个错误,而另一个进程则很好地完成了它的查询:

代码语言:javascript
复制
monetdbe.exceptions.OperationalError: Failed to open database: MALException:monetdbe.monetdbe_startup:GDKinit() failed (code -2)

我有点惊讶,它可以一次写两个表,而不是一次读两个表。我是不是忽略了什么?

我的stdinquery.py只是:

代码语言:javascript
复制
import sys
import monetdbe

monet_conn = monetdbe.connect("dw.db")
cursor = monet_conn.cursor()
query = sys.stdin.read()
cursor.executescript(query)
print(cursor.fetchdf())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-11 09:03:12

您正在启动多个并发Python进程。每一种方法都试图在dw.db位置创建或打开磁盘上的数据库。这将无法工作,因为嵌入的数据库进程彼此不知道。

使用monetdbe的核心C库,可以编写多线程应用程序,其中每个连接应用程序线程都使用自己的连接对象。参见用C 这里编写的示例。同样,这只适用于单个monetdbe进程中的并发线程,而不适用于声称相同数据库位置的多个并发monetdbe进程。

不幸的是,Python monetdbe模块目前无法设置类似于上面的C示例的东西。但是,在下一个版本中,可能会使用例如concurrent.futures来编写类似的Python。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66126083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档