Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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:在随机图上调用Networkx和函数的线程安全方式_Python_Multithreading_Random_Thread Safety_Networkx - Fatal编程技术网

Python:在随机图上调用Networkx和函数的线程安全方式

Python:在随机图上调用Networkx和函数的线程安全方式,python,multithreading,random,thread-safety,networkx,Python,Multithreading,Random,Thread Safety,Networkx,我创建了这个程序,主要是为了了解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 w

我创建了这个程序,主要是为了了解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个不同的图,我应该如何修改它?生成每个图形后,我应该用某种方法更改种子还是有一种better方法?甚至有必要使用可选参数seed=seed调用networkx吗?我正在阅读NetworkX的文档,它可能会使用全局随机生成器生成随机图,我有点担心

2) 如果我将程序中选择随机数目的节点的部分放在一个单独的函数中,并从代码的并行部分调用它,它会使用“正确的”种子来使向量随机化吗

3) 有没有更好的方法来并行创建随机图,然后从种子(可能是用户给定的)开始在这些图上拾取随机节点


我正在使用NetworkX 2.2版、numpy 1.15.4版、python 2.7版

我试图运行您的示例代码,但似乎包装器
@wrapps(func)
没有在任何地方导入或定义。你能添加相关代码吗?是的,只需从functools导入包装添加即可。我正在修改帖子