用于在Python中编写多线程应用程序的模块是什么?我知道语言和Stackless Python提供的基本并发机制,但它们各自的优点和缺点是什么?
我一直在阅读Python的多处理模块.我仍然认为我对它能做什么没有很好的理解.
假设我有一个四核处理器,我有一个包含1,000,000个整数的列表,我想要所有整数的总和.我可以这样做:
list_sum = sum(my_list)
Run Code Online (Sandbox Code Playgroud)
但这只会将其发送到一个核心.
是否有可能使用多处理模块将数组分开并让每个核心得到它的部分之和并返回值,以便计算总和?
就像是:
core1_sum = sum(my_list[0:500000]) #goes to core 1
core2_sum = sum(my_list[500001:1000000]) #goes to core 2
all_core_sum = core1_sum + core2_sum #core 3 does final computation
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
我正在比较同构的一大组networkx图,其中大多数图不应该是同构的(例如,假设0-20%与列表中的某些东西是同构的).
我尝试了以下方法.
graphs = [] # A list of networkx graphs
unique = [] # A list of unique graphs
for new in graphs:
for old in unique:
if nx.is_isomorphic(new, old[0]):
break
else:
unique.append([new])
Run Code Online (Sandbox Code Playgroud)
这让我得到了一个更快的缩小集,但我仍然发现它太慢而不适合理想使用.是否有一些更快的算法来处理这类问题(比较传递交换属性对)或将此算法扩展到多核设置(在20核机器上运行)的方法.
我已经过滤这些集合基于节点/边的数量数据,我们可以假设nx.is_isomorphic功能不能进行任何过滤类型的操作速度更快.我现在也无法轻松更改工具,因此使用编译包不是一种选择.
附加信息:
图形倾向于大约16-20个节点,总共24-48个边缘,存在大量互连,因此每个节点具有大约8个边缘.每个边缘也都有标记,但是只使用了2-3种边缘.
我知道 Python 程序使用单个 CPU 作为单个进程执行。
这是否意味着打开 4 个命令提示符并依次启动 4 个不同的 .py 脚本将导致使用 4 个 CPU 核心?
我的系统: