具有列表数组的共享内存的Python多处理

时间:2016-08-25 14:32:21

标签: python multiprocessing shared-memory python-multiprocessing

我需要知道是否有办法为一组bool列表共享内存:

s = Array( 'x' , range(10000000)) 

我需要编写什么来代替x来使它成为一个大小为64的列表数组。然后我必须在两个不同的进程中操作“s”:

#First

for i in range(0,photoCount):
    db.newDBS.insert_one({ 'photo' : s[i], 'user_id' : ids[i] })

#Second

s[photoCount].append = inPhoto

应该是什么类型?任何帮助或建议表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

Python Array模块允许两种类型的共享变量:Value,它是单个dtype的简单1D数组,multiprocessing.Array,它只是一个单独的值。

如果您在C中知道自己的方式,可以使用ctype设计自己的共享变量:请参阅documentation here.

如果你只需要一个2D数组并且你不想使用ctype共享对象,也许你可以在一个列表中展平你的数组并使用import java.io.IOException; import com.dropbox.core.DbxException; import com.dropbox.core.DbxRequestConfig; import com.dropbox.core.v2.DbxClientV2; import com.dropbox.core.v2.files.ListFolderResult; import com.dropbox.core.v2.files.Metadata; public class Main { private static final String ACCESS_TOKEN = "xxxx-xxxx-xxxx"; public static void main(String args[]) throws DbxException, IOException { DbxRequestConfig config = new DbxRequestConfig(""); DbxClientV2 client = new DbxClientV2(config, ACCESS_TOKEN); try { ListFolderResult result = client.files().listFolder(""); while (true) { for (Metadata metadata : result.getEntries()) { System.out.println(metadata.getPathLower()); } if (!result.getHasMore()) { break; } result = client.files().listFolderContinue(result.getCursor()); } } catch (Exception er) { er.printStackTrace(); } } } 代替?然后只需在处理完成后重新塑造。