Python:在分叉的孩子和父母之间共享变量
Posted
技术标签:
【中文标题】Python:在分叉的孩子和父母之间共享变量【英文标题】:Python: Share variable between forked child and parent 【发布时间】:2020-01-27 09:28:09 【问题描述】:我是 Python 的初学者,在父脚本和分叉子脚本之间共享变量时遇到问题。
objectif如下
主脚本必须从 API 调用中获取任务并在子进程中运行它们。然后它会减少可用 CPU 的计数器以避免资源饱和,并在有可用 CPU 时获取新任务。我还想在子进程完成时增加计数器,但我无法让它工作。
这是我的脚本主要功能
def main():
while True:
global availables_cpu
print("Got %s availables CPU requesting new job" % availables_cpu)
response = requests.get("http://" + url_api + "/api.php?action=get&ressources=" + str(availables_cpu))
data = json.loads(response.text)
job_path = data["hash"]
if job_path is None :
print("Nothing to do, waiting for a while")
else:
dir = job_path.rstrip()
if int(data["cpu"]) <= availables_cpu:
availables_cpu -= int(data["cpu"])
newpid = os.fork()
if newpid == 0:
code = child()
availables_cpu += int(data["cpu"])
os._exit(code)
else:
time.sleep(3)
print("Parent")
child() 函数只是获取数据并在子进程中运行脚本
我不确定执行此操作的最佳方法,我愿意接受任何建议。
【问题讨论】:
每个进程都在自己的内存空间中运行,所以不能共享变量,因为没有共享内存。 我认为这是你需要的docs.python.org/3.7/library/…,请注意关于非原子增量的警告。 【参考方案1】:正如@polku multiprocessing.Value 所建议的那样效果很好
通过这些修改
availables_cpu = multiprocessing.Value('I',psutil.cpu_count())
并将所有出现的availables_cpu
替换为availables_cpu.value
【讨论】:
以上是关于Python:在分叉的孩子和父母之间共享变量的主要内容,如果未能解决你的问题,请参考以下文章