Я создал эту программу, главным образом, чтобы понять, как работают Networkx и распараллеливание:
import random
import numpy as np
import networxk as nx
import multiprocessing
from functools import wraps
def unpack(func):
@wraps(func)
def wrapper(arg_tuple):
return func(*arg_tuple)
return wrapper
@unpack
def parallel_job(seed,shift):
N = 1000
k = 10
random.seed(seed)
np.random.seed(seed)
#Use Networkx to generate a random graph.
G = nx.erdos_renyi_graph(int(N),k/float(N), seed = seed)
#select 10 random nodes and print them
for j in range(10):
I = [10]
S = [N - I[0]]
X = np.array([0]*S[0] +[1]*I[0]).reshape((N,1))
np.random.shuffle(X)
print X
if __name__ == "__main__":
threadnum = 10
simnum = 10
seed = [j*2759 + 37*j**2 + 4757 for j in range(threadnum)]
shift = [j*simnum for j in range(simnum)
pool = multiprocessing.Pool(threadnum)
arguments = zip(shift,seed)
#spawn threadnum threads and give them parallel jobs
pool.map(parallel_job, iterable=arguments)
Так что эта программа определяет вектор начальных чисел, порождает определенное количество потоков, для каждого потока, который она назначает начальное число,Затем генерирует случайный граф с этим начальным числом, а затем выбирает и печатает 10 раз случайный выбор узлов.
Мои вопросы:
1) если вместо того, чтобы генерировать ровно один график на поток, я хотел бы создать m разных графиков, как мне его изменить?после того, как я сгенерирую каждый график, я должен изменить начальное значение каким-либо методом или есть способ лучше?Обязательно ли вызывать networkx с необязательным аргументом seed = seed?Я читаю в документации NetworkX, что он может использовать глобальный генератор случайных чисел для создания случайного графа, и я немного волнуюсь
2) Если я поставлю часть программы, которая выбирает случайное число узловв отдельной функции, и я вызываю ее из распараллеленной части кода, будет ли она использовать «правильное» начальное число для рандомизации вектора?
3) Есть ли лучший способ для создания случайных графов параллельно, а затемвыбрать случайные узлы на этих графиках, начиная с начального числа (которое может быть задано пользователем)?
Я использую NetworkX версии 2.2, numpy 1.15.4, python 2.7