python的值不正确多处理.池使用Red Hat Satellite API

2024-10-01 17:41:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Red Hat Satellite API为RHEL4、5、6系统创建组。不需要多处理,它工作得很好,但我想加快进程,所以考虑使用多处理.池但不知何故得到了错误的价值。这是我的代码:

CLIENT = xmlrpclib.Server(SATELLITE_URL, verbose=0)
KEY = CLIENT.auth.login(SATELLITE_LOGIN, SATELLITE_PASSWORD)

def ADD_SYSTEMS(ITEM):
    SYSTEMID = ITEM['id']
    SYSTEMNAME = ITEM['name']
    RUNNINGKERNEL = CLIENT.system.getRunningKernel(KEY,SYSTEMID)
    print type(RUNNINGKERNEL), RUNNINGKERNEL, multiprocessing.current_process().name
    if RUNNINGKERNEL.startswith("2.6.32"):
    CLIENT.systemgroup.addOrRemoveSystems(KEY,"ALL_RHEL6_SYSTEMS",SYSTEMID,True)
    elif RUNNINGKERNEL.startswith("2.6.18"):
    CLIENT.systemgroup.addOrRemoveSystems(KEY,"ALL_RHEL5_SYSTEMS",SYSTEMID,True)
    else:
    CLIENT.systemgroup.addOrRemoveSystems(KEY,"ALL_RHEL4_SYSTEMS",SYSTEMID,True)

if __name__ == '__main__':
    ACTIVESYSTEMS = CLIENT.system.listActiveSystems(KEY)
    PSIZE = multiprocessing.cpu_count()
    P = multiprocessing.Pool(processes=PSIZE)
    P.map(ADD_SYSTEMS, ACTIVESYSTEMS)
    P.close()
    P.join()

CLIENT.auth.logout(KEY)

当我运行代码时,我遇到了以下错误

^{pr2}$

如果我在函数中注释If..elif..else块,则print将显示正确的值。我不知道我做错了什么。请帮忙。在


Tags: keynameclienttrue错误allitemmultiprocessing
3条回答

正如您在循环过程中看到的那样,RUNNINGKERNEL的值是int,对于一种情况:

<type 'int'> 1 PoolWorker-11

你试图在那个整数上使用str.startswith,这是错误的。在

^{pr2}$

要解决这个问题,您可以检查RUNNINGKERNEL的类型,并在此基础上添加一些新的条件。在

if isinstance(RUNNINGKERNEL, int):
   #do something
elif isinstance(RUNNINGKERNEL, str):
   if RUNNINGKERNEL.startswith("2.6.32"):
      ...

看起来像这个远程过程调用

RUNNINGKERNEL = CLIENT.system.getRunningKernel(KEY,SYSTEMID)

有时返回一个字符串(“kernel something”),对于一个特定的键返回一个int(1)

尝试在int上使用startswith失败,因为它是一个字符串方法

我会检查cripritid上远程过程调用的实际答案,或者如果答案是预期的,请确保实际处理的是字符串

^{pr2}$

或者明确地处理int的情况:

如果是instance(RUNNINGKERNEL,int): 通过 其他是instance(RUNNINGKERNEL,str): #你的一堆假设

问题似乎出在5.4.1版本中对Red Hat Satellite API调用的限制。我没有找到任何关于这个限制的redhat官方文档,但是当我用两个工人进行测试时,代码运行得很好。我在我的工作站上运行代码,有12个CPU核,卫星API可以处理这些代码,并为一些调用返回1个。我将不得不硬编码的工人进程。在

相关问题 更多 >

    热门问题