monetdbe:多个连接读取与写入
monetdbe: multiple connections reading vs writing
我发现使用 monetdbe
(嵌入式,Python),我可以从两个进程同时将数据导入两个表,但我不能执行两个 SELECT
查询.
例如,如果我 运行 这个 Bash:
(python stdinquery.py < sql_examples/wind.sql &); (python stdinquery.py < sql_examples/first_event_by_day.sql &)
然后我从一个进程中得到这个错误,而另一个进程很好地完成了它的查询:
monetdbe.exceptions.OperationalError: Failed to open database: MALException:monetdbe.monetdbe_startup:GDKinit() failed (code -2)
我有点惊讶它可以同时写入两个表但不能同时读取两个表。我是不是忽略了什么?
我的 stdinquery.py
只是:
import sys
import monetdbe
monet_conn = monetdbe.connect("dw.db")
cursor = monet_conn.cursor()
query = sys.stdin.read()
cursor.executescript(query)
print(cursor.fetchdf())
您正在启动多个并发 Python 进程。其中每一个都尝试在 dw.db
位置的磁盘上创建或打开数据库。这行不通,因为嵌入式数据库 进程 相互不了解。
使用 monetdbe 的核心 C 库,可以编写多线程应用程序,其中每个连接应用程序线程都使用自己的连接对象。请参阅此用 C here 编写的示例。同样,这仅适用于单个 monetdbe 进程中的并发线程,不适用于声明相同数据库位置的多个并发 monetdbe 进程。
不幸的是,目前无法使用 Python monetdbe
模块来设置类似于上面 C 示例的内容。但可能在下一个版本中
将有可能使用例如concurrent.futures
在 Python 中写类似的东西。
我发现使用 monetdbe
(嵌入式,Python),我可以从两个进程同时将数据导入两个表,但我不能执行两个 SELECT
查询.
例如,如果我 运行 这个 Bash:
(python stdinquery.py < sql_examples/wind.sql &); (python stdinquery.py < sql_examples/first_event_by_day.sql &)
然后我从一个进程中得到这个错误,而另一个进程很好地完成了它的查询:
monetdbe.exceptions.OperationalError: Failed to open database: MALException:monetdbe.monetdbe_startup:GDKinit() failed (code -2)
我有点惊讶它可以同时写入两个表但不能同时读取两个表。我是不是忽略了什么?
我的 stdinquery.py
只是:
import sys
import monetdbe
monet_conn = monetdbe.connect("dw.db")
cursor = monet_conn.cursor()
query = sys.stdin.read()
cursor.executescript(query)
print(cursor.fetchdf())
您正在启动多个并发 Python 进程。其中每一个都尝试在 dw.db
位置的磁盘上创建或打开数据库。这行不通,因为嵌入式数据库 进程 相互不了解。
使用 monetdbe 的核心 C 库,可以编写多线程应用程序,其中每个连接应用程序线程都使用自己的连接对象。请参阅此用 C here 编写的示例。同样,这仅适用于单个 monetdbe 进程中的并发线程,不适用于声明相同数据库位置的多个并发 monetdbe 进程。
不幸的是,目前无法使用 Python monetdbe
模块来设置类似于上面 C 示例的内容。但可能在下一个版本中
将有可能使用例如concurrent.futures
在 Python 中写类似的东西。