在遍历http请求之后,如何使用python多处理获得全局和?

在遍历http请求之后,如何使用python多处理获得全局和?,python,python-3.x,multiprocessing,python-multiprocessing,Python,Python 3.x,Multiprocessing,Python Multiprocessing,我试图编写一个算法,遍历整个节点集合并返回它们的奖励总和。每个奖励只应计算一次。算法的输入将是节点开始时的URL,例如 URL的每个get请求都将返回一个JSON,如下所示: { "children":[ "http://fake.url/b", "http://fake.url/c" ], "reward":1 } 以下是我尝试过的: i

我试图编写一个算法,遍历整个节点集合并返回它们的奖励总和。每个奖励只应计算一次。算法的输入将是节点开始时的URL,例如

URL的每个get请求都将返回一个JSON,如下所示:

{
      "children":[
        "http://fake.url/b",
        "http://fake.url/c"
      ],
      "reward":1
    }
以下是我尝试过的:

import multiprocessing
import requests
import json

my_q = multiprocessing.Queue()
my_list  =['http://fake.url/']
reward_sum = 0

def enqueue(q):
    for data in my_list:
        q.put(data)

def get_it(q):
    while not q.empty():
        item = q.get()
        print(item)
        response = requests.get(item)
        kids = json.loads(response.content)
        print(f'URL: {item} --> {kids["reward"]}')
        for kid in kids['children']:
            print(kid)
            q.put(kid)

p1 = multiprocessing.Process(target=enqueue, args=(my_q,))
p2 = multiprocessing.Process(target=get_it, args=(my_q,))
p1.start()
p2.start()

p1.join()
p2.join()
以上工作原理:

  • 我正在使用多重处理
  • 我正在正确访问孩子和奖励
  • 我得到如下输出:
  • 我需要帮助解决哪些问题:

  • 如何在全局变量中跟踪奖励总额
  • 如何跟踪全局“看到”集,这样我就不会将重复项添加到总奖励金额中
  • def get_it(q):
    奖励总额=0
    seen=set()
    而不是q.empty():
    item=q.get()
    打印(项目)
    如果看到以下项目:
    持续
    见。添加(项目)
    响应=请求。获取(项)
    kids=json.load(response.content)
    奖励总额+=孩子[“奖励”]
    打印(f'URL:{item}-->{kids[“奖励”]})
    对于儿童中的儿童[“儿童”]:
    印刷品(儿童)
    q、 放(小孩)
    返回奖励总数
    
    为什么在返回前添加打印语句时,会出现这样的情况:print(f'reports total:{realls\u total}'),进度没有像以前那样循环通过子类?奇怪;不应该发生。
        http://fake.url/a
        URL: http://fake.url/a --> 1
        {'children': ['http://fake.url/b', 'http://fake.url/c'], 'reward': 1}
        http://fake.url/b
        http://fake.url/c
        http://fake.url/b
        URL: http://fake.url/b --> 2
        {'children': ['http://fake.url/d', 'http://fake.url/e'], 'reward': 2}
        http://fake.url/d
        http://fake.url/e
        http://fake.url/c
        URL: http://fake.url/c --> 3
        {'children': ['http://fake.url/f', 'http://fake.url/g'], 'reward': 3}
        http://fake.url/f
        http://fake.url/g
        http://fake.url/d
        URL: http://fake.url/d --> 4
        {'reward': 4}
        http://fake.url/e
        URL: http://fake.url/e --> 5
        {'reward': 5}
        http://fake.url/f
        URL: http://fake.url/f --> 6
        {'children': ['http://fake.url/h'], 'reward': 6}
        http://fake.url/h
        http://fake.url/g