如何将lastpass Vault对象传递给多处理进程worker

时间:2017-02-23 20:05:38

标签: python parallel-processing multiprocessing lastpass

我正在尝试运行多个进程,所有进程都使用来自Lastpass凭据的信息。想法是抓住Vault一次,然后使用一堆工人检索密码来完成他们的工作。

我得到了保险库 -

if __name__ == '__main__':
    LPV=lp.get_vault()

我定义工人:

def workerDEV():
   environment='DEV'
   print "I am in ", environment
   create_objects.main(client=client, LastPassVault=LPV)

def workerPRD():
   environment='PRD'
   print "I am in ", environment
   create_objects.main(client=client, LastPassVault=LPV)

启动工人:

worker_1 = multiprocessing.Process(target=workerDEV)
worker_1.start()

worker_2 = multiprocessing.Process(target=workerPRD)
worker_2.start()

我收到错误:

NameError: global name 'LPV' is not defined

这是有道理的,因为根据我的研究,每个工作人员重新启动会话,从而失去受if __name__ == '__main__':保护的LPV。

我调查了multiprocessing.Value(typecode_or_type, *args, lock=True),但无法弄清楚如何使用它。它似乎适用于String和Int类型的对象,但不适用于Vault。

谢谢,非常感谢来自这里的推荐。

1 个答案:

答案 0 :(得分:1)

将此替换为您的worker函数以删除冗余并将LPV作为参数传递给您的worker函数。

from multiprocessing import Process

def workerFunc(num, LPV): 
    print "I am in ", num 
    create_objects.main(client=client, LastPassVault=LPV)

for i in range(2): 
    Process(target=workerFunc, args=(i, LPV)).start()