Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何最好地处理由多个进程共享的一个列表_Python_Database_Performance_List_Multiprocessing - Fatal编程技术网

Python 如何最好地处理由多个进程共享的一个列表

Python 如何最好地处理由多个进程共享的一个列表,python,database,performance,list,multiprocessing,Python,Database,Performance,List,Multiprocessing,我有一个可变数量的进程,一些.exe 1-n都需要访问一个1000万ID的列表。每个some.exe都应获得一个ID,该ID尚未被另一个some.exe atm处理,也未被另一个some.exe atm处理 ID的处理将花费几分钟时间,可能会崩溃。已成功处理的ID应从所述列表中删除 一位朋友提出的临时解决方案是一个硬编码列表——这是胡说八道,需要大量人工交互 我曾考虑过使用一个文件,在那里保存列表,但对于多个进程,这可能不是最好的主意。 另一个解决方案可能是一个带有ID的小型sqlite数据库和

我有一个可变数量的进程,一些.exe 1-n都需要访问一个1000万ID的列表。每个some.exe都应获得一个ID,该ID尚未被另一个some.exe atm处理,也未被另一个some.exe atm处理

ID的处理将花费几分钟时间,可能会崩溃。已成功处理的ID应从所述列表中删除

一位朋友提出的临时解决方案是一个硬编码列表——这是胡说八道,需要大量人工交互

我曾考虑过使用一个文件,在那里保存列表,但对于多个进程,这可能不是最好的主意。 另一个解决方案可能是一个带有ID的小型sqlite数据库和一个进行中的布尔值,该布尔值在发出带有ID的some.exe之前设置,如果some.exe崩溃则取消设置,如果成功完成则删除


有没有建议如何以一种更具python风格/优雅的方式处理此列表?

将其拆分为1000万/n个文件并运行?我已经考虑过这样做,但感觉有点错误,因为我只需要ID,我想它就是文件名。另外,如何确定一次只有一个进程访问文件名?您可以将文件名作为参数传递给您的进程。我不明白您的ID部分。确实可以将文件名作为参数传递~然后文件名将是我最初需要的进程ID。但同样,我如何确保多个进程永远不会使用相同的文件名…这里也只有一个文件或更好的列表。假设您有一个主要进程保存列表,一些次要进程进行计算,然后将其结果传递回主要进程,主要进程更新列表,并为次要进程提供进一步的ID进行处理。我的意思是你只需要在这里腾出额外的数据库,或者你无论如何都需要它。更重要的是,您可以防止进程在无效ID上进行计算,因为主进程是唯一决定必须处理哪些ID的进程,并且可以为此使用某种队列结构。