【问题标题】:After using @ray decorator can't add data to dictionary使用@ray 装饰器后无法将数据添加到字典
【发布时间】:2019-04-25 05:55:51
【问题描述】:

我编写了一个函数,它从 API 获取一些数据并返回到字典。当我执行它工作正常。问题是当我尝试使用 ray 库在“同一时间”执行此函数两​​次时。数据从 api 正确获取,但未添加到字典中。

Companies = dict()

def call_company_api(company_id, dictionary):
    data = requests.get(API_CALL_COMPANY_URL.format(company_id)).json()
    # name = data['data']['krs_podmioty.nazwa'] FULL NAME
    name = data['data']['krs_podmioty.nazwa_skrocona']
    city = data['data']['krs_podmioty.adres_poczta']
    nip = data['data']['krs_podmioty.nip']
    community_id = data['data']['krs_podmioty.gmina_id']
    county_id = data['data']['krs_podmioty.powiat_id']
    voivodeship_id = data['data']['krs_podmioty.wojewodztwo_id']

    try:
        community = gminy_list[community_id]
        county = powiaty_list[county_id]
        voivodeship = wojewodztwa_list[voivodeship_id]

    except KeyError:
        community = community_id
        county = county_id
        voivodeship = voivodeship_id

    dictionary[name] = [city, county, community , voivodeship, nip]

当我执行以下代码时,工作正常


def call_company():
    for k in comapanies_list:
        call_company_api(k, Companies)

call_company()


print(Companies) --> {'BELKA19': ['Warszawa', 'Warszawa', 'Warszawa', 'Mazowieckie', '5252786971'], 'GSW CONSTRUCTION': ['Kraków', 'Kraków', 'Kraków', 'Małopolskie', '6762564804']}


在这种情况下数据没有添加到字典中,你知道如何解决吗?我尝试为所有 call_items 函数添加单独的字典,但它也不能像我预期的那样正常工作。


ray.init()



@ray.remote
def call_l1_items():
    for k in l1:
        call_company_api(k, Companies)



@ray.remote
def call_l2_items():
    for k in l2:
        call_company_api(k, Companies)



ret_id1 = call_l1_items.remote()
ret_id2 = call_l2_items.remote()
ret1, ret2 = ray.get([ret_id1, ret_id2])

print(Companies) --> {}

【问题讨论】:

    标签: python ray


    【解决方案1】:

    问题是 Ray 任务在单独的进程中执行(而不是线程),因此当您定义使用 Companies 字典的 call_l1_items 函数时,会在实际执行任务的工作进程。所以字典的远程副本会发生变异,但不是主脚本中的原始副本。

    您可以通过从函数返回项目然后更新主脚本中的原始字典来解决此问题。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2017-07-30
      • 2018-06-05
      • 2022-11-15
      • 2013-07-29
      • 1970-01-01
      • 2012-03-15
      • 2019-03-26
      相关资源
      最近更新 更多