我目前正在编写一个使用多处理以获得更好性能的刮刀。我构建程序的方式是多处理函数的子进程执行抓取工作并创建自己的sqlalchemy引擎,该引擎用于将已删除的数据写入我的数据库。通过这种方式,我可以有效地使用10个或者更多的刮刀。因为我不想通过提交向服务器发送垃圾邮件,所以我目前只在子进程中使用connection.execute命令,并在多处理部分之后使用transaction.commit,因此所有命令都将使用一个命令提交。但是,因为此提交与connection.execute命令没有相同的连接,所以它不起作用。如何循环连接池并查找/调用创建的各个连接,以便可以提交这些连接并在关闭之后?
有点伪代码来理解我的故事: `
def scrapefunction(scrapeIDs):
1. scrape info from sources
2. create own SQLalchemy engine and database-connection
3. process info into MySQL query
4. use connection.execute to execute the query
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=20)
results = pool.map(scrapefunction, scrapeIDs)
1. somehow loop through list of open connections from child processes
2. somehow call the needed connections and commit them
3. close the connections
` 顺便说一下,这段代码是用Python 3.4.3编写的。