0

有一个我要处理的数据列表。但是我需要用多个实例处理数据以提高效率。

每次每个实例要取出一个项目,从列表中删除,并通过一些程序进行处理。

首先,我尝试将列表存储在 sqlite 数据库中,但 sqlite 允许多个读锁,这意味着多个实例可能从数据库中获取相同的项目。

有什么方法可以让每个实例都获得一个独特的项目来处理?如果需要,我可以使用其他数据结构(其他数据库或只是文件)。

顺便说一句,在执行 cursor.execute(delete_query) 之后,有没有办法检查 DELETE 操作是否成功?

4

4 回答 4

0

据我所知,您需要启动 python 解释器的多个实例才能获得与 python 的真正并发(或至少多个执行进程,以便您可以:

  • 制作 1 个代理进程,告诉其他人他们可以获取哪些记录(例如通过0mq 之类的东西),但这可能会有效地使您的代理成为瓶颈。
  • 如果您的数据很容易整除(例如,主键的升序数字),则按进程划分部分数据库。

greenletstasklet这样的东西真的是一个接一个地执行,它们切换得非常快,因为它们没有真正的线程/进程开销,但它们并没有真正并发执行。

于 2012-07-11T10:17:25.410 回答
0

db 中的另一个字段作为标志(例如 PROCESSING、UNPROCESSED、PROCESSED)怎么样?

于 2012-07-11T10:17:37.663 回答
0

为什么不从数据库中读取所有项目并将它们放入队列中?您可以让工作线程获取项目,对其进行处理并继续进行下一个。

于 2014-01-03T16:40:30.303 回答
0

最简单的方法是在单个进程中生成项目并将它们传递给多个工作进程进行处理,例如:

from multiprocessing import Pool

def process(item):
    pass # executed in worker processes

def main():
    p = Pool() # use all available CPUs
    for result in p.imap_unordered(process, open('items.txt')):
        pass

if __name__=='__main__':
   main()
于 2012-07-11T14:32:55.240 回答