0

我正在寻找一种解决方案来为运行脚本进行多处理。我有一个启动 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 中,我都导入了一个库,每个脚本都必须再次导入它。但是,在这种情况下,它不能按我的意愿工作,我不明白为什么。我的库在第一个过程中导入一次,在其他过程中使用相同的“导入”。你可以帮帮我吗 ?

谢谢 !

4

1 回答 1

0

在多处理中可能不是这种情况(但看起来是这样)。当您尝试多次导入某些内容时(即import re在大多数模块中),Python 不会“重新导入”它。因为它会在已经导入的模块中看到它并跳过它。

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

于 2014-06-12T22:36:51.303 回答