为什么导入指令不会执行到python进程中

时间:2014-06-12 16:28:31

标签: python multiprocessing runpy

我正在寻找一种解决方案来进行多处理以运行脚本。 我有一个启动4个进程的函数,每个进程通过runpy.run_path()执行一个脚本,然后返回。

示例:

def valorise(product, dico_valo):
    res = runpy.run_path(product +"/PyScript.py", run_name="__main__")
    dico_valo[product] = res["ret"]

def f(mutex,l,dico):
    while len(l)!= 0:
        mutex.acquire()
        product = l.pop(0)
        mutex.release()
        p = Process(target=valorise, args=(product,dico))
        p.start()
        p.join()

def run_parallel_computations(valuationDate, list_scripts):
    if len(product_list)>0:
        print '\n\nPARALLEL COMPUTATIONS BEGIN..........\n\n'
        manager = Manager()
        l = manager.list(list_scripts)
        dico = manager.dict()
        mutex = Lock()
        p1 = Process(target=f, args=(mutex,l,dico), name="script1")
        p2 = Process(target=f, args=(mutex,l,dico), name="script2")
        p3 = Process(target=f, args=(mutex,l,dico), name="script3")
        p4 = Process(target=f, args=(mutex,l,dico), name="script4")
        p1.start()        
        p2.start()
        p3.start()
        p4.start()
        p1.join()
        p2.join()
        p3.join()
        p4.join()
        dico_isin = {}
        for i in iter(dico.keys()):
            dico_isin[i] = dico[i]
        return dico
        print '\n\nPARALLEL COMPUTATIONS END..........'
    else:
        print '\n\nNOTHING TO PRICE !'

在每个PyScript.py中,我导入一个库,每个脚本都必须再次导入它。但是,在这种情况下,它并没有按照我的意愿工作,我也不明白为什么。我的图书馆在第一个过程中被导入一次,同样的" import"用于其他过程。 你能帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

多处理可能不是这种情况(但看起来很像)。 如果您尝试多次导入某些内容(即大多数模块中的import re),Python将不会重新导入'它。正如它将在已导入的模块中看到它并将跳过它。

要强制重新加载,您可以尝试reload(module_name)(它无法从模块重新加载单个类/方法的导入,您可以重新加载整个模块或什么都没有)