【问题标题】:ModuleNotFoundError: No module named '__app__' from Azure Function App, Python using MultiprocessingModuleNotFoundError:Azure 函数应用中没有名为“__app__”的模块,Python 使用多处理
【发布时间】:2022-07-13 05:54:27
【问题描述】:

当我尝试在作为 Azure 函数应用程序运行的 Python 脚本中使用多处理时看到此错误。其他人在这里面临同样的问题 (ModuleNotFoundError: No module named '__app__') 但尚未回答有关他可腌制/不可腌制方法的问题。

所以这是给出错误的最简单的示例:

初始化.py

from multiprocessing import Pool
import azure.functions as func

def f(x):
    return x*x

def main(mytimer: func.TimerRequest) -> None:
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

这是控制台输出:

函数运行

[2022-02-19T21:26:37.672Z] Worker process started and initialized.
[2022-02-19T21:26:40.048Z] Executing 'Functions.TCDatesToCT' (Reason='Timer fired at 2022-02-19T16:26:40.0177058-05:00', Id=f632a25f-5621-4e6f-93f0-476ce60a5221)
[2022-02-19T21:26:40.284Z] Process SpawnPoolWorker-1:
[2022-02-19T21:26:40.296Z] Process SpawnPoolWorker-3:
[2022-02-19T21:26:40.298Z] Process SpawnPoolWorker-2:
[2022-02-19T21:26:40.319Z] Traceback (most recent call last):
[2022-02-19T21:26:40.322Z] Traceback (most recent call last):
[2022-02-19T21:26:40.324Z] Traceback (most recent call last):
[2022-02-19T21:26:40.326Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 315, in _bootstrap
[2022-02-19T21:26:40.329Z]     self.run()
[2022-02-19T21:26:40.330Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 315, in _bootstrap
[2022-02-19T21:26:40.336Z]     self.run()
[2022-02-19T21:26:40.338Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 108, in run
[2022-02-19T21:26:40.344Z]     self._target(*self._args, **self._kwargs)
[2022-02-19T21:26:40.346Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 108, in run
[2022-02-19T21:26:40.357Z]     self._target(*self._args, **self._kwargs)
[2022-02-19T21:26:40.360Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 315, in _bootstrap
[2022-02-19T21:26:40.365Z]     self.run()
[2022-02-19T21:26:40.367Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 114, in worker
[2022-02-19T21:26:40.373Z]     task = get()
[2022-02-19T21:26:40.375Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 108, in run
[2022-02-19T21:26:40.377Z]     self._target(*self._args, **self._kwargs)
[2022-02-19T21:26:40.383Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 114, in worker
[2022-02-19T21:26:40.391Z]     task = get()
[2022-02-19T21:26:40.395Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\queues.py", line 368, in get
[2022-02-19T21:26:40.401Z]     return _ForkingPickler.loads(res)
[2022-02-19T21:26:40.403Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\pool.py", line 114, in worker
[2022-02-19T21:26:40.405Z]     task = get()
[2022-02-19T21:26:40.407Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\queues.py", line 368, in get
[2022-02-19T21:26:40.416Z]     return _ForkingPickler.loads(res)
[2022-02-19T21:26:40.419Z] ModuleNotFoundError: No module named '__app__'
[2022-02-19T21:26:40.422Z]   File "C:\Users\bwarrick\AppData\Local\Programs\Python\Python39\lib\multiprocessing\queues.py", line 368, in get
[2022-02-19T21:26:40.431Z]     return _ForkingPickler.loads(res)
[2022-02-19T21:26:40.432Z] ModuleNotFoundError: No module named '__app__'
[2022-02-19T21:26:40.434Z] ModuleNotFoundError: No module named '__app__'

通常我在“if name == 'ma​​in':”之后使用 Multiprocessing,所以我认为这个问题是 Function App 如何调用 main() 函数在 init 中。几个星期以来,我一直在努力解决这个问题。任何想法表示赞赏。谢谢。

【问题讨论】:

    标签: python azure-functions python-multiprocessing


    【解决方案1】:

    当池尝试创建子进程时,这会在 Windows 机器上发生。与 Linux 不同,Windows 没有 fork 命令,因此必须对数据进行腌制并将其发送到子进程。只有在最顶层的模块中创建的函数才是可腌制的。为避免此错误,请使用 Linux Azure Function Apps 或在最顶层的模块中声明要并行化的函数。

    【讨论】:

      猜你喜欢
      • 2022-07-13
      • 1970-01-01
      • 2015-01-17
      • 2020-01-23
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多