【发布时间】:2022-01-31 03:18:59
【问题描述】:
基本上,我每次调用函数时都会尝试打开一个新进程。问题是当我在函数内部获取 PID 时,即使其他函数尚未完成,PID 与其他函数中的 PID 相同。
我正在用装饰器包装我的函数:
def run_in_process(function):
"""Runs a function isolated in a new process.
Args:
function (function): Function to execute.
"""
def wrapper(*args):
parent_connection, child_connection = Pipe()
process = Process(target=function, args=(*args, child_connection))
process.start()
response = parent_connection.recv()
process.join()
return response
return wrapper
并像这样声明函数:
@run_in_process
def example(data, pipe):
print(os.getpid())
pipe.send("Just an example here!")
pipe.close()
Obs1.:此代码在 AWS Lambda 中运行。
Obs2.:那些 lambda 在另一个开始之前没有完成,因为这个任务至少需要 10 秒。
您可以在日志中看到每个都是不同的执行,并且它们是在“同一”时间执行的。
问题是:为什么即使知道它们同时运行,它们也有相同的 PID?他们不应该有不同的PID吗?
我必须在一个独立的进程中执行这个功能
【问题讨论】:
标签: python amazon-web-services aws-lambda multiprocessing python-multiprocessing