gpt4 book ai didi

python - 如何重复请求任务

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:43 27 4
gpt4 key购买 nike

我想向将返回一些任务的服务器发出重复请求。服务器的响应将是一个字典,其中包含需要调用的函数列表。例如:

{ 
tasks: [
{
function: "HelloWorld",
id: 1212
},
{
function: "GoodbyeWorld"
id: 1222
}
]
}

注意:我正在模拟它。

对于这些任务中的每一个,我将使用multiprocessing 运行指定的函数。这是我的代码示例:

r = requests.get('https://localhost:5000', auth=('user', 'pass'))
data = r.json()

if len(data["tasks"]) > 0:
manager = multiprocessing.Manager()
for task in data["tasks"]:
if task["function"] == "HelloWorld":
helloObj = HelloWorldClass()
hello = multiprocessing.Process(target=helloObj.helloWorld)
hello.start()
hello.join()
elif task["function"] == "GoodbyeWorld":
byeObj = GoodbyeWorldClass()
bye = multiprocessing.Process(target=byeObj.byeWorld)
bye.start()
bye.join()

问题是,我想重复请求并在其他进程运行时填充 data["tasks"] 数组。如果我将所有内容都放入某个 while 循环中,它只会在初始响应的所有过程完成后发出请求(当 join() 已达到所有过程)。

谁能帮我重复请求,不断填充数组?如果我需要做出任何说明,请告诉我。

最佳答案

如果我没理解错的话,你需要这样的东西:

import time
from multiprocessing import Process

import requests

from task import FunctionFactory


def get_tasks():
resp = requests.get('https://localhost:5000', auth=('user', 'pass'))
data = resp.json()

return data['tasks']


if __name__ == '__main__':
procs = {}

for _ in range(10):
tasks = get_tasks()

if not tasks:
time.sleep(5)
continue

for task in tasks:

if task['id'] in procs:
# This task has been already submitted for execution.
continue

func = FunctionFactory.build(task['function'])

proc = Process(target=func)
proc.start()

procs[task['id']] = proc

# Waiting for all the submitted tasks to finish.
for proc in procs.values():
proc.join()

这里,函数 get_tasks 用于从服务器请求带有 idfunction 键的字典列表。在主要部分中,有一个 procs 字典,它将 id 映射到正在运行的流程实例,这些实例执行由 FunctionFactory 使用接收到的任务构建的函数 函数名称。如果已经有一个具有相同 ID 的正在运行的任务,它将被忽略。

使用这种方法,您可以根据需要经常请求任务(此处,10 请求用于 for 循环)并启动进程以并行执行它们。最后,您只需等待所有提交的任务完成即可。

关于python - 如何重复请求任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58781718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com