【问题标题】:Multiprocessing python doesn't behave as expected多处理 python 的行为不符合预期
【发布时间】:2018-09-27 15:55:59
【问题描述】:

您好,我正在使用多处理库从 main() 运行两个不同的函数:

Coap = multiprocessing.Process(target=runCoapSync(iotComponent))
huis=multiprocessing.Process(target=runHuis(iotComponent))
huis.start()
Coap.start()

问题是函数runHuis() 没有被触发,但是如果我注释行以运行另一个函数,函数runHuis() 会按预期工作。我在代码的其他地方使用了相同的结构,但效果很好。

这是两个函数的代码:

def runHuis(iotDevice):
    print("----------------1---------------")
    LCD=iotDevice.connectedHUIs[0]
    while True:
        LCD.alertHuman(iotDevice.connectedSensors[0].data.value)

def runCoapSync(iotDevice):
    print("----------------2---------------")
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(runCoap(iotDevice))

【问题讨论】:

  • 这是什么版本的 Python?您在哪个操作系统上运行?
  • 我正在使用树莓派上的 Python3,所以操作系统是树莓派

标签: python multiprocessing


【解决方案1】:

multiprocessing.Process 要求 target 是带有可选参数的可调用对象:

multiprocessing.Process(target=runCoapSync, args=(iotComponent,))

由于您改为调用它,其余程序等待 runCoapSync 完成。

【讨论】:

  • 很好的解决方案,谢谢,但你不觉得这很奇怪吗,因为当我自己传递参数时,它对runCoapSync() 函数非常有效。
  • @VincentNAHMIAS 它正在调用第一个函数,但是在 same 进程中,因为调用甚至在进程被实例化之前就已经发生了。
  • 哦好的我明白了,谢谢你的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多