[英]Concurrency on sqlite database using python
有一個我要處理的數據列表。 但是,我需要使用多個實例處理數據以提高效率。
每次每個實例應取出一個項目,將其從列表中刪除,並使用某些程序對其進行處理。
首先,我嘗試將列表存儲在sqlite數據庫中,但是sqlite允許多個讀取鎖,這意味着多個實例可能會從數據庫中獲取同一項目。
有什么方法可以使每個實例獲得一個唯一的項目進行處理? 如果需要,我可以使用其他數據結構(其他數據庫或只是文件)。
順便說一句,在執行cursor.execute(delete_query)之后,有沒有辦法檢查DELETE操作是否成功?
db中的另一個字段作為標志如何處理(例如,PROCESSING,UNPROCESSED,PROCESSED)?
最簡單的方法是在單個流程中生成項目,並將其傳遞給多個工作流程,例如:
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()
為什么不從數據庫中讀取所有項目並將它們放在隊列中呢? 您可以讓一個工作線程獲取該項目,對其進行處理,然后繼續進行下一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.