池多处理fai

2024-03-28 20:55:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我用“multiprocessing”中的“Pool”做了一个非常简单的并行工作示例。我想在同一时间启动多个查询。在

我激活了WAL模式,允许同时进行多个读/写操作。在

def FUNC1():        
    conn = sqlite3.connect("DB.db")
    cur = conn.cursor()

    cur.execute(QUERY1)
    print "TEST"

    cur.close()  
    conn.close()
    return

def FUNC2():
    conn = sqlite3.connect("DB.db")
    cur = conn.cursor()

    cur.execute(QUERY2)

    cur.close()  
    conn.close()

    return

if __name__ == '__main__':

    conn = sqlite3.connect("DB.db")
    cur = conn.cursor()
    cur.execute('PRAGMA journal_mode=wal')
    pool = Pool(processes=2)

    pool.map_async(FUNC1,"")
    pool.map_async(FUNC2,"")


    cur.close()
    conn.close()

终端应该显示一个print:“TEST”,它将显示例程执行了FUNC1操作。问题是它什么也没显示出来。在

有人知道为什么吗?在


编辑

我已经改了密码(谢谢“玛塔”!)现在的问题是没有并行工作。在

实际上,执行查询需要3秒,如果我传递三次同样的查询,最后的时间是9。。。在

为什么?在

^{pr2}$

Tags: testcloseexecutedbdefconnectconnsqlite3
1条回答
网友
1楼 · 发布于 2024-03-28 20:55:45

^{}调用函数一次,所提供的iterable的每个元素都作为参数。您提供了一个空的iterable(空字符串),因此函数永远不会被调用。^{}可能就是你要找的。在

相关问题 更多 >