我发现,使用monetdbe (embedded,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())发布于 2021-02-11 09:03:12
您正在启动多个并发Python进程。每一种方法都试图在dw.db位置创建或打开磁盘上的数据库。这将无法工作,因为嵌入的数据库进程彼此不知道。
使用monetdbe的核心C库,可以编写多线程应用程序,其中每个连接应用程序线程都使用自己的连接对象。参见用C 这里编写的示例。同样,这只适用于单个monetdbe进程中的并发线程,而不适用于声称相同数据库位置的多个并发monetdbe进程。
不幸的是,Python monetdbe模块目前无法设置类似于上面的C示例的东西。但是,在下一个版本中,可能会使用例如concurrent.futures来编写类似的Python。
https://stackoverflow.com/questions/66126083
复制相似问题